删除所有限制在一个表(Drop All constraints in a Table)

2019-08-19 05:30发布

想写剧本,删除约束。

我有以下功能在我的数据库选择Constarints

SELECT  name
    FROM sys.foreign_keys

我已经写了使用上述脚本修改脚本,

SELECT 
    'ALTER TABLE ' + OBJECT_NAME(parent_object_id) + 
    ' DROP CONSTRAINT ' + name
FROM sys.foreign_keys

使用上面的查询我怎样才能执行这些限制?

我可以使用DROP DATABASE DBName 。 但我只是想通过取消约束以删除表。

是否有可能不打算对SP? 或者有什么简单的方法,我可以继续吗?

Answer 1:

那么你总是可以输出从底部窗格中复制,粘贴到顶部窗格,然后按F5。 或者,你可以建立一个字符串,直接执行:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'
ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))
    + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) + 
    ' DROP CONSTRAINT ' + QUOTENAME(name) + ';'
FROM sys.foreign_keys;

PRINT @sql;
-- EXEC sp_executesql @sql;

(当你快乐时与PRINT输出,其注释掉,并取消对EXEC 。请注意,打印输出将被截断为8K Management Studio中,但变量真正拥有完整的命令。)

此外,我不知道这有多么涉及到是否要使用存储过程或没有,或为什么你正在尝试做的是“W / O去为SP” ......这种查询可以运行一个存储过程或不,这一切都取决于你打算如何经常调用它,程序住在哪里等



Answer 2:

这在SQL Server 2008为我工作:

DECLARE @SQL NVARCHAR(MAX) = N'';

SELECT @SQL += N'
ALTER TABLE ' + OBJECT_NAME(PARENT_OBJECT_ID) + ' DROP CONSTRAINT ' + OBJECT_NAME(OBJECT_ID) + ';' 
FROM SYS.OBJECTS
WHERE TYPE_DESC LIKE '%CONSTRAINT' AND OBJECT_NAME(PARENT_OBJECT_ID) = 'YOUR_TABLE';

PRINT @SQL
--EXECUTE(@SQL)

当然,取消对EXECUTE(@SQL)时准备好运行



Answer 3:

正确的标记问题并不为我工作。 但是,这对我的作品在SQL Server 2017年:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'
ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))
    + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) +
    ' DROP CONSTRAINT ' + QUOTENAME(name) + ';'
FROM sys.objects
WHERE type_desc LIKE '%CONSTRAINT'
    AND OBJECT_NAME(PARENT_OBJECT_ID) LIKE 'your_table_name';

EXEC sp_executesql @sql;


文章来源: Drop All constraints in a Table