Bạn sẽ cần xóa WITH SCHEMABINDING
từ các chế độ xem của bạn và các hàm có giá trị trong bảng. Để xác định chúng, bạn có thể truy vấn INFORMATION_SCHEMA
lượt xem:
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%'
- Trước tiên hãy sao lưu cơ sở dữ liệu.
- Tạo
ALTER
tập lệnh của tất cả các chế độ xem và chức năng liên kết với giản đồ. - Xóa các từ "
WITH SCHEMABINDING
"từ kịch bản. - Chạy tập lệnh một vài lần cho đến khi tất cả các lỗi tham chiếu được giải quyết.
- Thay đổi đối chiếu trên cơ sở dữ liệu của bạn.
- Tập lệnh và loại bỏ tất cả các ràng buộc (khóa, kiểm tra và mặc định).
- Thay đổi đối chiếu của từng cột bằng cách sử dụng tập lệnh bên dưới.
- Tạo lại các ràng buộc.
- Cuối cùng, hãy chạy tập lệnh gốc một vài lần để bật tính năng liên kết lược đồ.
Bạn có thể thay đổi đối chiếu của tất cả các cột bằng tập lệnh này:
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