Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Thay đổi sắp xếp cơ sở dữ liệu SQL Server

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%'
  1. Trước tiên hãy sao lưu cơ sở dữ liệu.
  2. 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 đồ.
  3. Xóa các từ "WITH SCHEMABINDING "từ kịch bản.
  4. 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.
  5. Thay đổi đối chiếu trên cơ sở dữ liệu của bạn.
  6. 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).
  7. 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.
  8. Tạo lại các ràng buộc.
  9. 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhận các hàng có tổng bằng giá trị đã cho

  2. Tổng hàng và cột trong tổng hợp động

  3. Làm thế nào để lấy bốn ký tự cuối cùng từ một varchar?

  4. Chèn câu lệnh + Kết hợp dữ liệu bảng và biến trong trình kích hoạt

  5. Sử dụng BETWEEN trên một trường varchar không phải là một trường số?