Sql 按CONSTNAME删除外键
我想从表中删除外键,但我不知道它的标识符 我从SYSCAT.KEYCOLUSE表中获取标识符 之后,我尝试使用该标识符删除FK 获取标识符Sql 按CONSTNAME删除外键,sql,database,db2,Sql,Database,Db2,我想从表中删除外键,但我不知道它的标识符 我从SYSCAT.KEYCOLUSE表中获取标识符 之后,我尝试使用该标识符删除FK 获取标识符 SELECT keycoluse.CONSTNAME FROM SYSCAT.KEYCOLUSE keycoluse WHERE TABSCHEMA = 'USER1' AND TABNAME = 'TABLE1' AND COLNAME = 'ID_TABLE' 结果=ID000000001 滴FK ALTER TABLE TABLE1 DROP FOR
SELECT keycoluse.CONSTNAME FROM SYSCAT.KEYCOLUSE keycoluse WHERE TABSCHEMA = 'USER1' AND TABNAME = 'TABLE1' AND COLNAME = 'ID_TABLE'
结果=ID000000001
滴FK
ALTER TABLE TABLE1
DROP FOREIGN KEY (SELECT keycoluse.CONSTNAME FROM SYSCAT.KEYCOLUSE keycoluse WHERE TABSCHEMA = 'USER1' AND TABNAME = 'TABLE1' AND COLNAME = 'ID_TABLE');
此抛出错误:[错误代码:-104,SQL状态:42601]
但如果我以这种方式使用之前获得的标识符,它会起作用:
ALTER TABLE TABLE1
DROP FOREIGN KEY ID000000001;
这样,它就不起作用了:
ALTER TABLE TABLE1
DROP FOREIGN KEY 'ID000000001';
当我执行SELECT以获取id时,它会获取一个varchar'ID000000001',这会给出错误
?有没有办法将SELECT的结果强制转换为与此命令相同的类型
ALTER TABLE TABLE1
DROP FOREIGN KEY ID000000001;
如果需要标识符,则不能使用变量(由子选择返回)或文字
您可以做的是从查询中生成一个脚本,尽管我无法想象您为什么要使用如此复杂的方法删除单个约束:
SELECT
'ALTER TABLE', 'TABLE1',
'DROP FOREIGN KEY', keycoluse.CONSTNAME
FROM
SYSCAT.KEYCOLUSE keycoluse
WHERE
TABSCHEMA = 'USER1' AND TABNAME = 'TABLE1' AND COLNAME = 'ID_TABLE'
查询将返回正确的ALTER
语句。您可以将其复制/粘贴到您喜爱的客户端软件中,或将结果写入文本文件并执行,例如,使用
db2 -f mydropscript.sql
我认为值得一提的是,在进行较大更改时,使用这些脚本通常是正确的方法;不应该太劝阻人们不要使用它们。