2009-09-17 7 views

答えて

2

SQL Server 2000のテーブルに制約を簡単にドロップする方法はないと思います。つまり、外部キーを特定/削除/再作成できるスクリプトを書いた人がたくさんいます制約。 1つの例はhttp://www.mssqltips.com/tip.asp?tip=1376です - しかし、私はSQL Server 2000でそれをテストしていません。

EDIT:あなたのためのドロップ/作成スクリプトを生成する別のexampleです。

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でテストされますが、[OK]をする必要がありません)

が '無効' 生成:

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

関連する問題