Как изменить параметры сортировки SQL Server

27

Как изменить параметры сортировки по умолчанию для SQL Server 2008 R2 Express для всего сервера и конкретной базы данных?

Есть ли способ сделать это с помощью визуального интерфейса SQL Server Management Studio? В окне «Свойства сервера» (и в соответствующем окне «Свойства базы данных») это свойство недоступно для редактирования.

рем
источник
2
Если вы хотите изменить параметры сортировки всех столбцов в базе данных, посмотрите на этот скрипт . Я не пробовал это сам, но я нашел его для коллеги, который хотел сделать именно это.
Джастин Даринг
2
Если вы хотите изменить параметры сортировки базы данных, воспользуйтесь этим инструментом: codeproject.com/KB/database/ChangeCollation.aspx. Он работает с SQL Server 2005 и 2008 и работает лучше, чем сценарии, которые вы можете найти в веб.
Эрвин

Ответы:

25

Да.

Можно изменить параметры сортировки SQL Server 2008 R2 по умолчанию и отдельных баз данных по умолчанию, но это сложная задача.

К сожалению, нет визуальной возможности сделать это через SSMS.

SQL Server 2008 поддерживает настройку параметров сортировки на следующих уровнях:

  • сервер

  • База данных

  • колонка

  • выражение

Параметры установки по умолчанию определяются системным языком Windows. Параметры сортировки на уровне сервера можно изменить во время установки или изменить языковой стандарт системы Windows перед установкой. Больше...

Установка и изменение параметров сортировки сервера - SQL Server 2008

  • Убедитесь, что у вас есть вся информация или сценарии, необходимые для воссоздания пользовательских баз данных и всех объектов в них.

  • Экспортируйте все свои данные с помощью такого инструмента, как утилита bcp. Для получения дополнительной информации см. Импорт и экспорт массовых данных.

  • Удалите все пользовательские базы данных.

  • Перестройте основную базу данных, указав новое сопоставление в свойстве SQLCOLLATION команды setup

  • Создайте все базы данных и все объекты в них.

  • Импортируйте все ваши данные.

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

  • Установите COLLATIONпараметр в CREATE DATABASEзаявлении при создании новой базы данных.
  • Аналогично, установите COLLATIONпараметры в ALTER DATABASEоператоре, чтобы изменить параметры сортировки существующей базы данных.

    ALTER DATABASE [database_name] COLLATE SQL_Latin1_General_CP1_CI_AS;

Установка и изменение параметров сортировки столбцов

  • Некоторые параметры сортировки столбцов останутся прежними даже после изменения параметров сортировки базы данных. В этом случае вы должны изменить параметры сортировки отдельных столбцов.
CoderHawk
источник
6

Убедитесь, что вы действительно хотите «удалить» пользовательские базы данных, как указано в ответе выше. Вы можете просто «отключить» базы данных. Или действительно, вы ничего не можете сделать, так как перестройка мастера эффективно удаляет любые ссылки на пользовательские базы данных. Временами базы данных создаются в нужном порядке, а сервер - нет. В этом случае вам не нужно восстанавливать все пользовательские базы данных из резервных копий.

AndrewSQL
источник
5

Я сделал что-то подобное, и это сработало, но вы должны иметь в виду, что индексы, указывающие на тип данных, должны быть удалены text / varchar / nvarchar, запустить скрипт и затем создать индексы.

USE YourDataBase
GO

DECLARE @Table_Name NVARCHAR(100)
SET @Table_Name = NULL--- THIS IS THE TableName that you want to change its collation columns

--- if null will set to all tables

DECLARE @TempTable AS TABLE
(
ID INT IDENTITY
,TableName NVARCHAR(100)
,ColumnName NVARCHAR(100)
,TypeName NVARCHAR(100)
,Max_length INT
,Collation_Name NVARCHAR(100)
,EnterDtm DATETIME DEFAULT GETDATE()
)
DECLARE @NewCollation NVARCHAR(100)
SET @NewCollation = 'Latin1_General_CI_AS' --- THIS IS THE COLLATION NAME THAT YOU WANT TO CHANGE

INSERT INTO @TempTable(TableName,ColumnName,TypeName,Max_length,Collation_Name)
SELECT 
QUOTENAME(SCHEMA_NAME(tables.schema_id)) + '.' + QUOTENAME(tables.name) AS TableName
,all_columns.name AS ColumnName
,type_name(all_columns.user_type_id)
,all_columns.max_length
,all_columns.collation_name  
from sys.all_columns INNER JOIN sys.tables ON
tables.object_id = all_columns.object_id
AND collation_name IS NOT NULL
AND all_columns.collation_name != @NewCollation
WHERE tables.object_id = ISNULL(object_id(@Table_Name),all_columns.object_id)


DECLARE @TableID SMALLINT
SET @TableID = (SELECT MIN(ID) FROM @TempTable)

DECLARE @Query NVARCHAR(1000),@TableName NVARCHAR(100),@ColumnName NVARCHAR(100),@TypeName NVARCHAR(100)
,@Size INT

WHILE @TableID IS NOT NULL
BEGIN
    SET @TableName = (SELECT TableName FROM @TempTable WHERE ID = @TableID)
    SET @ColumnName = (SELECT QUOTENAME(ColumnName) FROM @TempTable WHERE ID = @TableID)
    SET @TypeName = (SELECT TypeName FROM @TempTable WHERE ID = @TableID)
    SET @Size = (SELECT Max_length FROM @TempTable WHERE ID = @TableID) 

    SET @Query='ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @ColumnName + ' ' + @TypeName+ ISNULL ('(' +CAST(@Size AS VARCHAR(200))+')', '') +' COLLATE '+ @NewCollation  
    PRINT (@Query)

    SET @TableID = (SELECT MIN(ID) FROM @TempTable WHERE ID > @TableID)
END 

это мой первый ответ выложенный извините за мой беспорядок

Jeffry
источник
-1

Экспорт всех данных ( в том числе логины, связанные серверы, рабочие места SQL Agent, настройки DB Mail, и т.д.), и восстановление данных уровня экземпляра, а также перегрузка всех пользовательских данных, является много работы. И даже после всего этого, по-прежнему нет гарантии, что вы можете обновить параметры сортировки базы данных по умолчанию, ALTER DATABASEпоскольку существует несколько условий, которые не позволяют завершить операцию (см. Раздел «Изменение параметров сортировки базы данных» в ALTER DATABASEдокументации ). ,

Существует, однако, недокументированный метод, который намного проще. Основным недостатком является то, что он не поддерживается. Это не означает, что что-то пойдет не так, просто если что-то случится, Microsoft не поможет исправить это (потому что они никогда не гарантировали, что это будет работать).

Метод, о котором я говорю, работает sqlservr.exeс -q {new_collation_name}коммутатором. Это немного больше, чем это, но это основная идея. Этот метод просто обновляет системные метаданные, которые имеют преимущества и последствия, основными из которых являются:

ВЫГОДЫ

  • достаточно быстро
  • обойти большинство ограничений, которые мешают ALTER DATABASEработать
  • вероятно, гораздо более точный, чем любой сценарий, который люди придумали за эти годы, чтобы отбрасывать и воссоздавать объекты

НЕДОСТАТКИ

  • не поддерживается, если что-то идет не так
  • VARCHARданные могут измениться, ЕСЛИ кодовая страница отличается между старым и новым параметрами сортировки, и символы со значениями 128 - 255 (0x80 - 0xFF) существуют, и эти символы не существуют как один и тот же символ с тем же значением в новом коде стр. Таким образом, существует вероятность потери данных, и ваши данные должны быть в первую очередь исследованы, чтобы убедиться, что это условие не существует. Но это также означает, что существует множество случаев, когда только символы имеют значения от 0 до 127, которые не представляют опасности, даже если кодовая страница изменяется.
  • Пользовательские типы таблиц (UDTT) пропускаются и должны обновляться вручную.

Подробное описание того, что sqlservr.exe -qметод делает и чего не делает (включая подробности о том, как сортировки работают на разных уровнях и возможные проблемы, на которые следует обратить внимание), смотрите в моем посте:

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

Чтобы изменить только экземпляр ( в том числе баз данных системы: master, model, msdb, и tempdb) и один или несколько баз данных (но не все базы данных), просто отсоединение базы данных (ы) , которые вы хотите исключить из этой операции, а затем повторно приложить их как только обновление сортировки завершится.

Соломон Руцкий
источник