इस विषय पर चारों ओर बहुत सारी जानकारी है। यह विस्तृत उत्तर देखें। @AaronBertrand द्वारा। यह विदेशी कुंजियों को अस्थायी रूप से अक्षम करने के बारे में बात करता है लेकिन यह सब पढ़कर और इच्छानुसार संशोधित करने के लिए आपके पास खेलने और बहुत कुछ हासिल करने के लिए एक अच्छी स्क्रिप्ट होगी।
मेरी तरफ से मैं सभी विदेशी कुंजी प्राप्त करने के लिए 2 अलग-अलग स्क्रिप्ट का प्रस्ताव कर सकता हूं। दोनों ही मामलों में --EXEC (@SQL)
. को अनकम्मेंट करें अपना ALTER
निष्पादित करने के लिए कोड। या आप तब तक प्रतीक्षा कर सकते हैं जब तक कि यह सभी परिवर्तन खंडों को प्रिंट न कर दे और फिर उन्हें निष्पादित करने के लिए कॉपी पेस्ट करें।
पहले वाला INFORMATION_SCHEMA
. का उपयोग करता है बाधाओं को प्राप्त करने के लिए:
DECLARE @SQL VARCHAR(MAX)=''
SELECT @SQL = @SQL + 'ALTER TABLE ' + QUOTENAME(FK.TABLE_SCHEMA) + '.' + QUOTENAME(FK.TABLE_NAME) + ' DROP CONSTRAINT [' + RTRIM(C.CONSTRAINT_NAME) +'];' + CHAR(13)
--SELECT K_Table = FK.TABLE_NAME, FK_Column = CU.COLUMN_NAME, PK_Table = PK.TABLE_NAME, PK_Column = PT.COLUMN_NAME, Constraint_Name = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT
ON PT.TABLE_NAME = PK.TABLE_NAME
--EXEC (@SQL)
PRINT @SQL
यह विभिन्न सिस्टम दृश्यों और एक CTE तालिका का उपयोग करता है।
DECLARE @SQL varchar(4000)=''
;WITH ReferencingFK AS
(
SELECT fk.Name AS 'FKName', OBJECT_NAME(fk.parent_object_id) 'ParentTable',
cpa.name 'ParentColumnName', OBJECT_NAME(fk.referenced_object_id) 'ReferencedTable',
cref.name 'ReferencedColumnName'
FROM sys.foreign_keys fk
INNER JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN sys.columns cpa ON fkc.parent_object_id = cpa.object_id AND fkc.parent_column_id = cpa.column_id
INNER JOIN sys.columns cref ON fkc.referenced_object_id = cref.object_id AND fkc.referenced_column_id = cref.column_id
)
SELECT @SQL = @SQL + 'ALTER TABLE ' + ParentTable + ' DROP CONSTRAINT [' + RTRIM(FKName) +'];' + CHAR(13)
--SELECT FKName, ParentTable, ParentColumnName, ReferencedTable, ReferencedColumnName
FROM ReferencingFK
WHERE ReferencedTable = 'Employee'
ORDER BY ParentTable, ReferencedTable, FKName
--EXEC (@SQL)
PRINT @SQL