sql >> Database teknologi >  >> RDS >> Sqlserver

Ændring af SQL Server-databasesortering

Du skal fjerne WITH SCHEMABINDING fra dine synspunkter og tabel-vurderede funktioner. For at identificere dem kan du forespørge på INFORMATION_SCHEMA visninger:

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. Først sikkerhedskopier databasen.
  2. Generer en ALTER script af alle skemabundne visninger og funktioner.
  3. Slet ordene "WITH SCHEMABINDING " fra scriptet.
  4. Kør scriptet et par gange, indtil alle referencefejl er løst.
  5. Skift sorteringen på din database.
  6. Skript og slip alle begrænsninger (nøgler, kontroller og standardindstillinger).
  7. Skift sorteringen af ​​hver kolonne ved hjælp af scriptet nedenfor.
  8. Genskab begrænsninger.
  9. Kør endelig det originale script et par gange for at aktivere skemabinding.

Du kan ændre sammenstillingen af ​​alle kolonner med dette script:

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. Brug af variabel til at indstille mysql INNODB AUTO_INCREMENT tabelværdi

  2. Henter Lås ventetimeout overskredet; prøv at genstarte transaktionen, selvom jeg ikke bruger en transaktion

  3. MySQL enum vs. set

  4. Slet data fra afhængige tabeller