sql >> Database >  >> RDS >> Sqlserver

Sortering van SQL Server-database wijzigen

U moet WITH SCHEMABINDING . verwijderen van uw weergaven en tabelwaardige functies. Om ze te identificeren, kunt u de INFORMATION_SCHEMA . opvragen weergaven:

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. Maak eerst een back-up van de database.
  2. Genereer een ALTER script van alle schemagebonden weergaven en functies.
  3. Verwijder de woorden "WITH SCHEMABINDING " uit het script.
  4. Voer het script een paar keer uit, totdat alle referentiefouten zijn opgelost.
  5. Wijzig de sortering in uw database.
  6. Script en verwijder alle beperkingen (sleutels, controles en standaardinstellingen).
  7. Verander de sortering van elke kolom met behulp van het onderstaande script.
  8. Restricties opnieuw maken.
  9. Voer ten slotte het originele script een paar keer uit om schemabinding in te schakelen.

U kunt de sortering van alle kolommen wijzigen met dit 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. hoe query (zoeken) van sql op Amazon Athena die JSON-waarde heeft?

  2. Oracle snellere paging-query

  3. Drop en maak ENUM met sequelize correct?

  4. Hoe de getelde waarden te krijgen met een kommascheidingsteken als een enkele rijwaarde?