sql >> Databáze >  >> RDS >> Sqlserver

Změna řazení databáze SQL Server

Budete muset odstranit WITH SCHEMABINDING z vašich pohledů a tabulkových funkcí. Chcete-li je identifikovat, můžete se zeptat na INFORMATION_SCHEMA zobrazení:

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. Nejprve zálohujte databázi.
  2. Vygenerujte ALTER skript všech pohledů a funkcí vázaných na schéma.
  3. Smažte slova „WITH SCHEMABINDING “ ze skriptu.
  4. Několikrát spusťte skript, dokud nebudou vyřešeny všechny referenční chyby.
  5. Změňte řazení v databázi.
  6. Skriptujte a zrušte všechna omezení (klíče, kontroly a výchozí hodnoty).
  7. Pomocí níže uvedeného skriptu změňte řazení jednotlivých sloupců.
  8. Znovu vytvořte omezení.
  9. Nakonec spusťte několikrát původní skript, abyste povolili vazbu schématu.

Pomocí tohoto skriptu můžete změnit řazení všech sloupců:

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. jak nastavit trvalé výchozí časové pásmo na serveru mysql

  2. Použití rekurze k vytvoření navigace

  3. mysql swap položky s číslem řádku

  4. Iterováním řádků druhé tabulky vrátíte sadu výsledků