如何在Sql Server 2000中删除表上的所有外键约束?

Mat*_*ias 15 sql t-sql sql-server

如何使用T-SQL删除SQL Server 2000中的表上的所有外键约束?

kri*_*tof 15

如果只是禁用约束是一个选项,您可以使用:

ALTER TABLE myTable NOCHECK CONSTRAINT all
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地使用以下方法切换它们:

ALTER TABLE myTable WITH CHECK CHECK CONSTRAINT all
Run Code Online (Sandbox Code Playgroud)

如果要在所有表中禁用约束,可以使用:

-- disable all constraints
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

-- enable all constraints
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Run Code Online (Sandbox Code Playgroud)

更多问题:使用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
Run Code Online (Sandbox Code Playgroud)


lep*_*pie 5

你去了:(没有在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
Run Code Online (Sandbox Code Playgroud)

生成'启用':

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
Run Code Online (Sandbox Code Playgroud)

更新:哎呀,我以为你想要所有表格:)你可以修改上面的单个表格.


May*_*ayo 2

我想您会发现在 SQL Server 2000 中没有简单的方法来删除表上的约束。也就是说,有很多人编写了可以识别和删除/禁用/重新创建外键约束的脚本。一个例子位于http://www.mssqltips.com/tip.asp?tip=1376 - 但我还没有在 SQL Server 2000 上测试过它。

编辑:这是另一个为您生成删除/创建脚本的示例。