SQL删除自动约束

时间:2013-01-19 10:42:36

标签: sql sql-server constraints

我使用脚本在我的表上创建了一些约束而没有指定约束名称。结果,我最终得到了像FK__DOC_OBGS___kntr___54E63309这样的约束。

是否可以在不指定确切约束名的情况下删除约束?

例如,像这样的东西(不起作用)

ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT LIKE 'FK__DOC_OBGS___kntr%'

问题是我们有很多这个表的数据库,我需要从表中删除所有约束,但显然每个表的名称都不同。

3 个答案:

答案 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