想写剧本,删除约束。
我有以下功能在我的数据库选择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? 或者有什么简单的方法,我可以继续吗?
那么你总是可以输出从底部窗格中复制,粘贴到顶部窗格,然后按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” ......这种查询可以运行一个存储过程或不,这一切都取决于你打算如何经常调用它,程序住在哪里等
这在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)
时准备好运行
正确的标记问题并不为我工作。 但是,这对我的作品在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;