Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zmiana sortowania bazy danych SQL Server

Musisz usunąć WITH SCHEMABINDING z Twoich poglądów i funkcji wycenianych w tabeli. Aby je zidentyfikować, możesz zapytać o INFORMATION_SCHEMA widoki:

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. Najpierw wykonaj kopię zapasową bazy danych.
  2. Wygeneruj ALTER skrypt wszystkich widoków i funkcji związanych ze schematem.
  3. Usuń słowa „WITH SCHEMABINDING " ze skryptu.
  4. Uruchom skrypt kilka razy, aż wszystkie błędy odwołań zostaną rozwiązane.
  5. Zmień sortowanie w swojej bazie danych.
  6. Skryptuj i usuń wszystkie ograniczenia (klucze, kontrole i wartości domyślne).
  7. Zmień sortowanie każdej kolumny za pomocą poniższego skryptu.
  8. Odtwórz ograniczenia.
  9. Na koniec, uruchom kilka razy oryginalny skrypt, aby włączyć wiązanie ze schematem.

Możesz zmienić sortowanie wszystkich kolumn za pomocą tego skryptu:

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. Użyj jednego CTE wiele razy

  2. Sprawdź niewysłaną pocztę w SQL Server (T-SQL)

  3. Hibernacja (/JPA) stronicowania po stronie serwera i MS SQL Server

  4. Przechowywanie formuły (równań) w bazie danych do późniejszej oceny (SQL Server 2005)

  5. SQL Server:Znajdź domyślną wartość kolumny z zapytaniem