sql >> Databasteknik >  >> RDS >> Sqlserver

Ändra SQL Server Databas sortering

Du måste ta bort WITH SCHEMABINDING från dina åsikter och tabellvärderade funktioner. För att identifiera dem kan du fråga INFORMATION_SCHEMA visningar:

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. Säkerhetskopiera först databasen.
  2. Generera en ALTER skript för alla schemabundna vyer och funktioner.
  3. Ta bort orden "WITH SCHEMABINDING " från skriptet.
  4. Kör skriptet några gånger tills alla referensfel är lösta.
  5. Ändra sorteringen på din databas.
  6. Skriv och släpp alla begränsningar (nycklar, kontroller och standardinställningar).
  7. Ändra sorteringen för varje kolumn med hjälp av skriptet nedan.
  8. Återskapa begränsningar.
  9. Kör slutligen det ursprungliga skriptet några gånger för att aktivera schemabindning.

Du kan ändra sorteringen av alla kolumner med detta skript:

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. Formatera datumnummer från databasen

  2. Bestäm logik för MySQL Select - Reservation System

  3. Åtkomst till en tillfällig tabell flera gånger i MySql

  4. Ändra en tabellvärderad funktion i SQL Server