आपको WITH SCHEMABINDING
remove को हटाना होगा आपके विचारों और तालिका-मूल्यवान कार्यों से। उन्हें पहचानने के लिए आप INFORMATION_SCHEMA
. को क्वेरी कर सकते हैं दृश्य:
SELECT TABLE_SCHEMA, TABLE_NAME AS VIEW_NAME
FROM INFORMATION_SCHEMA.VIEWS
WHERE VIEW_DEFINITION LIKE '%SCHEMABINDING%'
SELECT ROUTINE_SCHEMA, ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%SCHEMABINDING%'
- पहले डेटाबेस का बैकअप लें।
- एक
ALTER
उत्पन्न करें सभी स्कीमा-बाध्य दृश्यों और कार्यों की स्क्रिप्ट। - शब्द "
WITH SCHEMABINDING
. हटाएं "स्क्रिप्ट से। - स्क्रिप्ट को कुछ बार चलाएं, जब तक कि सभी संदर्भ त्रुटियों का समाधान न हो जाए।
- अपने डेटाबेस पर संयोजन बदलें।
- स्क्रिप्ट और सभी बाधाओं (कुंजी, चेक और डिफ़ॉल्ट) को छोड़ दें।
- नीचे दी गई स्क्रिप्ट का उपयोग करके प्रत्येक कॉलम का मिलान बदलें।
- बाधाओं को फिर से बनाएं।
- आखिरकार, स्कीमा-बाइंडिंग को सक्षम करने के लिए मूल स्क्रिप्ट को कुछ बार चलाएं।
आप इस स्क्रिप्ट के साथ सभी स्तंभों का मिलान बदल सकते हैं:
DECLARE @collation nvarchar(128)
DECLARE @commands table ([SQL] nvarchar(max))
DECLARE @cursor cursor
DECLARE @sql nvarchar(max)
SET @collation = 'SQL_Latin1_General_CP1_CI_AS'
INSERT @commands ([SQL])
SELECT 'ALTER TABLE ' + QUOTENAME(c.TABLE_SCHEMA) +'.'+ QUOTENAME(c.TABLE_NAME)
+ ' ALTER COLUMN ' + QUOTENAME(c.COLUMN_NAME)
+ ' ' + c.DATA_TYPE
+ ISNULL('(' + LTRIM(STR(c.CHARACTER_MAXIMUM_LENGTH)) + ')', '')
+ ISNULL(' COLLATE ' + @collation, '')
+ ' ' + CASE c.IS_NULLABLE WHEN 'NO' THEN 'NOT ' ELSE '' END + 'NULL'
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN INFORMATION_SCHEMA.TABLES t
ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME
WHERE t.TABLE_TYPE = 'BASE TABLE'
AND c.COLLATION_NAME <> @collation
SET @cursor = CURSOR FOR SELECT [SQL] FROM @commands
OPEN @cursor
FETCH NEXT FROM @cursor INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @sql
EXEC (@sql)
FETCH NEXT FROM @cursor INTO @sql
END