установить сопоставление автоматически - PullRequest
0 голосов
/ 24 октября 2011

База данных моего приложения mydb имеет параметры сортировки, отличные от tempdb. Я получаю много исключений, сравнивая строковые значения между временными таблицами tempdb и постоянными таблицами mydb. Было решено создать mydb с тем же сопоставлением, что и tempdb. Параметры сортировки должны быть установлены автоматически с использованием скрипта. Я пробовал это:

DECLARE @SQLCollation sql_variant
SELECT @SQLCollation = DATABASEPROPERTYEX('tempdb', 'Collation')
ALTER DATABASE mydb COLLATE @SQLCollation -- doesn't work
ALTER DATABASE mydb COLLATE Latin1_General_CI_AS -- works, but doesn't suit me because I have to type in collation myself in this SQL

Так как мне установить такое же сопоставление для mydb, как и для tempdb?

Ответы [ 3 ]

3 голосов
/ 24 октября 2011

Нельзя просто изменить параметры сортировки БД с помощью ALTER DATABASE .Это только меняет системные базы данных (имена объектов и т. Д.).(Ответ Dalex)

Вы должны выполнить шаги, подробно изложенные в ответах на Изменение сортировки базы данных SQL Server .

Другой вариант использования COLLATE Database_Default для принудительной сортировкине зная, что это такое.См. Ошибка SQL Server «Неявное преобразование, потому что параметры сортировки значения не разрешены из-за конфликта параметров сортировки.» и SQL Server - существует ли способ массового разрешения конфликтов параметров сортировки

2 голосов
/ 24 октября 2011

Изменение порядка сортировки БД не изменит порядок сортировки уже существующих таблиц в БД.

Другой вариант - указать параметры сортировки, которые будут использоваться при создании временной таблицы.

create table #TempTable
(
  Name varchar(10) collate database_default
)  

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

0 голосов
/ 24 октября 2011
DECLARE @SQLCollation NVARCHAR(1000)
SELECT @SQLCollation = 'ALTER DATABASE MyDb COLLATE '+CAST(DATABASEPROPERTYEX('Tempdb', 'Collation') as NVARCHAR(1000))
exec (@sqlcollation)
...