use*_*567 17 constraints sql-server-2008
我试图编写用于删除约束的脚本.
我有以下函数来选择我的DataBase中的Constarints
SELECT name
FROM sys.foreign_keys
Run Code Online (Sandbox Code Playgroud)
我使用上面的脚本编写了alter scripts
SELECT
'ALTER TABLE ' + OBJECT_NAME(parent_object_id) +
' DROP CONSTRAINT ' + name
FROM sys.foreign_keys
Run Code Online (Sandbox Code Playgroud)
使用上面的查询我如何执行这些约束?
我可以用DROP DATABASE DBName.但我只是试图通过删除约束来删除表.
是不是可以不去SP?或者我可以采取哪些简单方法?
Aar*_*and 37
您可以随时复制底部窗格中的输出,将其粘贴到顶部窗格中,然后按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;
Run Code Online (Sandbox Code Playgroud)
(当您对PRINT输出感到满意时,请将其注释掉并取消注释EXEC.请注意,在Management Studio中,打印输出将被截断为8K,但变量确实包含整个命令.)
另外我不知道这与你是否正在使用存储过程有什么关系,或者为什么你试图"不使用SP"...这个查询可以作为存储过程运行或者不是,这一切都取决于你打电话的频率,手术所在的地方等等.
小智 20
这在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)
Run Code Online (Sandbox Code Playgroud)
当然,取消注释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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55598 次 |
| 最近记录: |