SQL Server:从同一表中删除多个未知约束

时间:2019-02-24 13:32:32

标签: sql sql-server

我检查了this SO question中给出的答案,以删除其名称未知的约束。

  1. 在SQL Server中,我们可以假定它们将始终采用给定的相同格式吗? (FK__TABLENAME__KEYPREFIX)?
  2. T(c)的定义是什么?
  3. 如果需要从同一张表中删除两个这样的约束,以下内容正确吗?

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'添加到已添加到错误密钥的外键上。我了解到,您不能仅通过更改来添加层叠选项,因此方法是将两者都删除然后重新创建。

0 个答案:

没有答案