Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengubah penyortiran Database SQL Server

Anda harus menghapus WITH SCHEMABINDING dari tampilan Anda dan fungsi bernilai tabel. Untuk mengidentifikasinya, Anda dapat menanyakan INFORMATION_SCHEMA dilihat:

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. Cadangkan dulu databasenya.
  2. Buat ALTER skrip semua tampilan dan fungsi terikat skema.
  3. Hapus kata "WITH SCHEMABINDING " dari skrip.
  4. Jalankan skrip beberapa kali, hingga semua kesalahan referensi teratasi.
  5. Ubah susunan pada database Anda.
  6. Skrip dan hapus semua batasan (kunci, pemeriksaan, dan default).
  7. Ubah susunan setiap kolom menggunakan skrip di bawah ini.
  8. Buat ulang batasan.
  9. Terakhir, jalankan skrip asli beberapa kali untuk mengaktifkan pengikatan skema.

Anda dapat mengubah susunan semua kolom dengan skrip ini:

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. Cara tercepat untuk menentukan apakah ada catatan

  2. Bagaimana cara menemukan batas kelompok bilangan urut yang bersebelahan?

  3. Cara Mengembalikan Kunci Duplikat dari Dokumen JSON di SQL Server

  4. CS2001 Missing AssemblyAttributes.cs saat menjalankan paket SSIS yang disebarkan ke server

  5. Bagaimana saya bisa memilih hari pertama dalam sebulan di SQL?