Изменение сортировки базы данных SQL Server - PullRequest
1 голос
/ 30 мая 2010

У меня есть запрос на изменение параметров сортировки базы данных SQL Server:

ALTER DATABASE solarwind95 сопоставить SQL_Latin1_General_CP1_CI_AS

но я получаю эту странную ошибку:

Meldung 5075, Ebene 16, Status 1, Zeile 1 Das 'Spalte'-Objekt 'CustomPollerAssignment.PollerID' ist фон 'Datenbanksortierung' abhängig. Die Datenbanksortierung kann nicht Geändert Werden, Венн Эйн schemagebundenes Objekt von ihr абхангиг ист. Entfernen Sie die Anhängigkeiten der Datenbanksortierung, und wiederholen Sie den Vorgang.

Извините за немецкое сообщение об ошибке. Я не знаю, как переключить язык на английский, но вот перевод:

Перевод: Сообщение 5075, Уровень 16, Статус 1, строка 1 Объект «столбец» 'CustomPollerAssignment.PollerID' зависит от сортировки базы данных. сортировка базы данных не может быть изменена, если привязанный к схеме объект зависит от него. Удалить зависимость от базы данных сортировка и повтор.

Я получил намного больше таких ошибок.

Ответы [ 3 ]

3 голосов
/ 30 мая 2010

Вам необходимо удалить WITH SCHEMABINDING из ваших представлений и табличных функций. Чтобы определить их, вы можете запросить INFORMATION_SCHEMA просмотров:

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. Первое резервное копирование базы данных.
  2. Создание сценария ALTER для всех связанных со схемой представлений и функций.
  3. Удалить слова "WITH SCHEMABINDING" из сценария.
  4. Запустите сценарий несколько раз, пока все ошибки ссылок не будут устранены.
  5. Измените параметры сортировки в вашей базе данных.
  6. Скрипт и удаление всех ограничений (ключей, проверок и значений по умолчанию).
  7. Измените параметры сортировки каждого столбца с помощью приведенного ниже сценария.
  8. Воссоздать ограничения.
  9. Наконец, запустите оригинальный сценарий несколько раз, чтобы включить привязку схемы.

Вы можете изменить параметры сортировки всех столбцов с помощью этого сценария:

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 голос
/ 30 мая 2010

Это будут первичные ключевые столбцы, которые являются кластерными индексами. При кластеризованных индексах записи хранятся в порядке возрастания столбца. Если вы измените параметры сортировки базы данных, все таблицы должны быть переупорядочены.

0 голосов
/ 30 мая 2010

В этом случае даже удаление привязки схемы не поможет вам

Для изменения параметров сортировки требуются шаги, описанные в KB 325335

Это относится в основном к SQL Server 2000, но применяется тот же принцип

  • Скрипт голых таблиц
  • Ограничения скрипта, триггеры, ключи и т. Д. + Весь код, представления и т. Д. Для дальнейшего использования
  • Создание пустых таблиц в новой БД
  • DTS или SSIS голые данные
  • Применение сценария для создания ограничений, триггеров, ключей, кода, представлений и т. Д.
...