我检查了this SO question中给出的答案,以删除其名称未知的约束。
FK__TABLENAME__KEYPREFIX
)?T(c)
的定义是什么? DECLARE @sql1 NVARCHAR(MAX);
DECLARE @sql2 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);
SELECT
@sql2 = 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___aaaa%') T(c);
EXEC(@sql1);
EXEC(@sql2);
注意
实际的最终目标是将'CASCADE ON DELETE'
添加到已添加到错误密钥的外键上。我了解到,您不能仅通过更改来添加层叠选项,因此方法是将两者都删除然后重新创建。