Как сбросить параметры сортировки для всех столбцов в базе данных? - PullRequest
5 голосов
/ 29 июня 2011

Мне нужно сбросить параметры сортировки для всех столбцов во всех таблицах в базе данных: enter image description here

Я хочу использовать параметры сортировки базы данных по умолчанию

Я пытался изменить его в свойствах базы данных: enter image description here

но параметры сортировки уже установлены в столбцах, и это означает, что я не могу перезаписать его

У кого-нибудь есть сценарий, который может сделать это для меня?

Ответы [ 4 ]

3 голосов
/ 29 июня 2011

Я собрал скрипт, который должен сделать достаточно приличную работу (надеюсь). Запустите скрипт в соответствующей базе данных с результатами в виде текста. Затем скопируйте и вставьте вывод в окно скрипта, чтобы изменить параметры сортировки каждого столбца:

declare @NewCollationName sysname
set @NewCollationName = 'Latin1_General_CS_AS'
select
    'ALTER TABLE ' + QUOTENAME(SCHEMA_NAME(st.schema_id)) + '.' + QUOTENAME(st.name) +
    ' ALTER COLUMN ' + QUOTENAME(sc.name) + ' ' + styp.name + '(' +
    CASE WHEN sc.max_length = -1 THEN 'max' ELSE CONVERT(varchar(10),sc.max_length) END +
    ') collate ' + @NewCollationName + '
    go
    '
from
    sys.columns sc
        inner join
    sys.tables st
        on
            sc.object_id = st.object_id
        inner join
    sys.types styp
        on
            sc.user_type_id = styp.user_type_id
where
    sc.collation_name is not null and
    OBJECTPROPERTY(st.object_id,N'IsMSShipped')=0

Однако следует отметить, что сгенерированный сценарий не будет работать, если столбцы являются целью ограничений или объектом привязанного к схеме объекта (представления или функции).

В таких случаях вам придется написать сценарий зависимых объектов, удалить их из базы данных, затем запустить сценарий, сгенерированный сценарием выше, и, наконец, повторно добавить зависимые объекты.

1 голос
/ 29 июня 2011

См. (Изменение параметров базы данных) http://msdn.microsoft.com/en-us/library/ms174269.aspx

ALTER DATABASE database_name COLLATE collation_name
0 голосов
/ 20 марта 2016

Предлагаемый скрипт (можно найти здесь ) предназначен для перебора всех таблиц в вашей БД и изменения параметров сортировки на желаемую.

Он основан на сценарии:

ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME varchar(100) COLLATE Latin1_General_CI_AS NULL
0 голосов
/ 29 июня 2011

Самый быстрый способ сбросить столбец - это УСТАНОВИТЬ UNUSED столбец, затем добавить столбец с тем же именем и типом данных.

Это будет самый быстрый способ, поскольку обе операции не будут касаться реальной таблицы (только обновление словаря).

Фактический порядок столбцов будет изменен (столбец сброса будет последним столбцом). Если ваш код основан на упорядочении столбцов (не должно!), Вы можете создать представление, в котором столбец будет иметь правильный порядок (переименовать таблицу, создать представление с тем же именем, что и у старой таблицы, отозвать гранты из базовой таблицы, добавить гранты для просмотра).

Метод SET UNUSED не восстанавливает пространство, используемое столбцом (тогда как удаление столбца освободит пространство в каждом блоке).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...