我使用脚本在我的表上创建了一些约束而没有指定约束名称。结果,我最终得到了像FK__DOC_OBGS___kntr___54E63309
这样的约束。
是否可以在不指定确切约束名的情况下删除约束?
例如,像这样的东西(不起作用)
ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT LIKE 'FK__DOC_OBGS___kntr%'
问题是我们有很多这个表的数据库,我需要从表中删除所有约束,但显然每个表的名称都不同。
答案 0 :(得分:5)
SQL中的DDL命令不与like运算符配合使用。
但是,您可以使用information_schema视图并轻松地为drop constraint命令构建SQL,如下所示:
SELECT 'ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT ' + CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_NAME LIKE 'FK__DOC_OBGS___kntr%'
答案 1 :(得分:5)
DECLARE @sql1 NVARCHAR(MAX);
SELECT @sql1 = c
FROM
(
SELECT 'ALTER TABLE DOC_INVS_1 DROP CONSTRAINT ' + CONSTRAINT_NAME + '; '
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'DOC_INVS_1'
and CONSTRAINT_NAME LIKE 'FK__DOC_INVS___kntr%'
) T(c);
EXEC(@sql1);
答案 2 :(得分:0)
使用Access to SQL Server升迁工具后,我遇到了类似的问题。在我的情况下,我需要循环所有表以匹配约束,这可以这样做:
STUFF
您可以在SQL Server的更高版本中避免.addFlags(notifyDetails.flags |= Notification.FLAG_AUTO_CANCEL);
方法,有关详细信息,请参阅this answer。