Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 TempDB Collation  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Добрый день.

Рабочая база данных:
select databasepropertyex('work','collation') -> Polish_CI_AS

TempDB:
select databasepropertyex('tempdb','collation') -> SQL_Latin1_General_CP1_CI_AS

В хранимой процедуре пользуюсь временными таблицами, но при связывании таблиц по текстовому полю получаю:
Cannot resolve the collation conflict between "Polish_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.

Как лучше бороться с данной проблемой? Чтоб не на каждой временной таблице для полей явно указать "collation"
17 фев 16, 18:37    [18831709]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
Crimean
Member

Откуда:
Сообщений: 13147
mezzanine,

> Чтоб не на каждой временной таблице для полей явно указать "collation"

увы
17 фев 16, 18:41    [18831736]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
Crimean
Member

Откуда:
Сообщений: 13147
да! есть еще вариант создавать таблички как select into, но он не всегда применим
17 фев 16, 18:41    [18831741]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
invm
Member

Откуда: Москва
Сообщений: 9688
mezzanine
Как лучше бороться с данной проблемой?
Выбирайте
use master;
create database DBTest001 collate Polish_CI_AS;
go

use DBTest001;

create table #t1 (s varchar(100)); insert into #t1 values ('1');
create table #t2 (s varchar(100) collate database_default); insert into #t2 values ('1');
declare @t table (s varchar(100)); insert into @t values ('1');

select databasepropertyex('tempdb', 'collation'), databasepropertyex(db_name(), 'collation');
select sql_variant_property(s, 'collation') from #t1;
select sql_variant_property(s, 'collation') from #t2;
select sql_variant_property(s, 'collation') from @t;
go

drop table #t1, #t2;
go

use master;
drop database DBTest001;
go
17 фев 16, 20:13    [18832107]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
Crimean
Member

Откуда:
Сообщений: 13147
вариант с @T совсем не эквивалентен варианту с #T. по куче причин.
17 фев 16, 20:45    [18832204]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
invm
Member

Откуда: Москва
Сообщений: 9688
Crimean
вариант с @T совсем не эквивалентен варианту с #T. по куче причин.
Да. Но это не значит, что ТС'у он однозначно не подойдет.
17 фев 16, 22:00    [18832375]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
Crimean
Member

Откуда:
Сообщений: 13147
invm,

согласен. советую туда же добавить вариант с select ... into #T. очень удобно. хотя тоже не всегда применимо.
17 фев 16, 22:06    [18832394]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Спасибо. Буду пробовать.
17 фев 16, 22:07    [18832399]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
mezzanine,

я создаю вот так Name varchar(250) COLLATE database_default,
и все создается с настройками текущей базы
17 фев 16, 22:23    [18832442]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
Glory
Member

Откуда:
Сообщений: 104751
mezzanine
Как лучше бороться с данной проблемой? Чтоб не на каждой временной таблице для полей явно указать "collation"

изменить collate системных баз
17 фев 16, 22:24    [18832450]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Glory,

Это master и model? Какие могут быть последствия?
Можете поделиться ссылочкой как делать. В инете уже искал на эту тему, только нашел соообщения что не возможно изменить collate системных баз.
17 фев 16, 22:27    [18832461]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
invm
Member

Откуда: Москва
Сообщений: 9688
Для полноты картины
https://msdn.microsoft.com/en-us/library/ff929143(v=sql.110).aspx
Local temporary tables are permitted within a contained database, but their behavior differs from those in non-contained databases. In non-contained databases, temporary table data is collated in the collation of tempdb. In a contained database temporary table data is collated in the collation of the contained database.
17 фев 16, 22:27    [18832462]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
invm
Member

Откуда: Москва
Сообщений: 9688
mezzanine,

Collation системных баз изменить нельзя. Их можно пересоздать с нужным collation.
17 фев 16, 22:32    [18832479]     Ответить | Цитировать Сообщить модератору
 Re: TempDB Collation  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 834
invm
mezzanine,

Collation системных баз изменить нельзя. Их можно пересоздать с нужным collation.


+1

Set or Change the Server Collation
17 фев 16, 22:58    [18832563]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить