如何使用T-SQL在SQL Server 2000上删除表中的所有外键约束?
如果只是禁用约束条件的话,你可以使用以下代码:
ALTER TABLE myTable NOCHECK CONSTRAINT all
然后你只需使用以下方法重新打开它们:
ALTER TABLE myTable WITH CHECK CHECK CONSTRAINT all
如果您想在所有表中禁用约束,则可以使用以下方法:
-- disable all constraints
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
-- enable all constraints
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
问题的更多内容请参见:Can foreign key constraints be temporarily disabled using TSQL?
但是,如果您需要永久删除约束,则可以使用此脚本发布在databasejurnal.com上。只需稍微修改一下即可仅删除外键。
create proc sp_drop_fk_constraints
@tablename sysname
as
-- credit to: douglas bass
set nocount on
declare @constname sysname,
@cmd varchar(1024)
declare curs_constraints cursor for
select name
from sysobjects
where xtype in ('F')
and (status & 64) = 0
and parent_obj = object_id(@tablename)
open curs_constraints
fetch next from curs_constraints into @constname
while (@@fetch_status = 0)
begin
select @cmd = 'ALTER TABLE ' + @tablename + ' DROP CONSTRAINT ' + @constname
exec(@cmd)
fetch next from curs_constraints into @constname
end
close curs_constraints
deallocate curs_constraints
return 0
SELECT 'ALTER TABLE ' + OBJECT_SCHEMA_NAME(parent_object_id) + '.' + OBJECT_NAME(parent_object_id) + ' DROP CONSTRAINT ' + [name] FROM sys.foreign_keys WHERE OBJECT_SCHEMA_NAME(referenced_object_id) = 'dbo' AND OBJECT_NAME(referenced_object_id) = '' - Avishek回答链接
4 4
- leppie 1系统表在SQL Server 2000中名称相似但不同:http://msdn.microsoft.com/en-us/library/aa260604%28v=SQL.80%29.aspx - Emyr 回答链接
2 2 我认为你会发现在SQL Server 2000中没有简单的方法来删除表上的约束。尽管如此,有很多人编写了脚本来识别、删除/禁用/重新创建外键约束。其中一个例子可以在http://www.mssqltips.com/tip.asp?tip=1376找到 - 但我没有在SQL Server 2000上测试过它。 - Mayo 回答链接
网页内容由stack overflow 提供, 点击上面的可以查看英文原文, - 相关问题
- 20 如何在SQL Server 2000中删除表(如果存在)?
- 6 SQL Server 条件外键约束
- 195 SQL删除表外键约束
- 23 查找所有外键约束及其删除规则的查询(SQL Server)
- 36 如何在所有表中删除所有外键约束?
- 3 SQL Server外键约束问题
- 8 SQL Server 外键约束的好处
- 21 如何在SQL Server 2000中一次生成所有表的脚本?
- 6 SQL Server:删除带有外键约束的行:事务能否覆盖约束?
- 11 SQL Server:使用外键删除表
给你:(未经SQL2000测试,但应该没有问题)
生成“禁用”:
SELECT 'IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N''[dbo].' + FK +''') AND parent_object_id = OBJECT_ID(N''[dbo].' + PT + ''')) ALTER TABLE ' + PT + ' NOCHECK CONSTRAINT ' + FK + ';' FROM (SELECT OBJECT_NAME(constraint_object_id) as FK, OBJECT_NAME(parent_object_id) as PT FROM [sys].[foreign_key_columns] ) T ORDER BY FK
生成“启用”:
SELECT 'ALTER TABLE ' + PT + ' WITH CHECK CHECK CONSTRAINT ' + FK + ';' FROM (SELECT OBJECT_NAME(constraint_object_id) as FK, OBJECT_NAME(parent_object_id) as PT FROM [sys].[foreign_key_columns] ) T ORDER BY FK
更新:糟糕,我以为你要所有表格都用它 :) 你只需修改上面的单个表格即可。
1
编辑:这里是另一个示例,可以为您生成删除/创建脚本。
原文链接