2009-09-17 76 views

回答

2

我想你會發現沒有簡單的方法來刪除SQL Server 2000中的表上的約束。也就是說,有很多人編寫腳本可以識別和刪除/禁用/重新創建外鍵限制。一個例子是在http://www.mssqltips.com/tip.asp?tip=1376 - 但我沒有在SQL Server 2000上測試過它。

編輯:這裏是另一個example爲您生成drop/create腳本。

13

如果簡單地禁用的約束是一個不錯的選擇,你可以使用:

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?

但是,如果您需要永久刪除約束條件,則可以使用this script posted on 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 
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 

生成「啓用」:

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

系統表是不同的,但在SQL Server 2000中命名相似:http://msdn.microsoft.com/en-us/library/aa260604%28v=SQL.80%29.aspx – Emyr 2011-09-08 13:33:09