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

Откуда:
Сообщений: 23
Всем добрый день.

Наткнулся на следующую фишку.
Возможно обсуждалась, но что-то не нашел.
В MS SQL Server 2005 (9.00.3042) и в MS SQL Server 2008 (10.0.1600.22), установленных естественно с кодировкой (collate) Cyrillic_General_CI_AI есть в системных представлениях поля с кодировками:
- Latin1_General_BIN
- Latin1_General_CI_AS_KS_WS.

Вообще поразил список (более 300 у 2008-го, и чуть меньше 300 у 2005-го) всех полей с collate, отличным от кодировки БД.

select user_name(objectproperty(object_id, 'OwnerId')) as Scm, object_name(object_id) as ObjectName,  name as ColumnName, collation_name as Collation
  from sys.all_columns
    where collation_name like 'Latin%'
  order by Scm, ObjectName, ColumnName

При этом в одном и том же представлении могут быть поля с Cyrillic_General_CI_AI, так и с Latin*!
Например, та же sys.objects (name - Cyrillic_General_CI_AS; type и type_desc - Latin1_General_CI_AS_KS_WS).

Все это вызывает некоторое неудобство. Так например, приходится писать что-то в духе:
  select *
    from sys.objects as o
    where (o.type collate database_default) in (select val from @myfiltertable)

Вопрос.
Есть у кого-нибудь информация по поводу того будет ли меняться ситуация в следующих версиях?
Не будут ли меняться у существующих полей кодировка при накатывании SP (Service Pack'ов)?
Стоит ли заморачиваться с написанием view'х-оберток над системными, в которых все строковые поля преобразовывать к collate database_default?
Кто-нибудь двигался в этом направлении?

Эмоции.
Ну, и нафига так было делать?
Просто интересно...

_________________________________________
Все выше сказанное личное мнение автора и может не совпадать с реальностью.
Сильно не пинать, каждый может ошибаться.
4 ноя 08, 12:16    [6393564]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005. MSSQL 2008. Collation некоторых полей системных представлений  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Хм, а и правда... У меня сервер ставился с Latin1_General_CI_AI, запрос
select collation_name from sys.all_columns
where collation_name is not null
group by collation_name
в базе master дает
Latin1_General_BIN
Latin1_General_CI_AI
Latin1_General_CI_AS_KS_WS
Забавно...
4 ноя 08, 12:48    [6393644]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: MSSQL 2005. MSSQL 2008. Collation некоторых полей системных представлений  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Только что нарвался на эту милую особенность - collation сервера и базы SQL_Latin1_General_CP1251_CI_AS, а поля type в sys.all_objects - Latin1_General_CI_AS_KS_WS. Кое-как разобрался, хотя, конечно, сначала не поверил глазам своим, глядя на результат
select object_name(object_id), name, collation_name
from sys.all_columns
where collation_name<>'SQL_Latin1_General_CP1251_CI_AS'

Но почему джойн по sys.all_objects.type к CTE c XQuery не вызывает collation conflict, а джойн табличной переменной с данными, взятыми из того же CTE - вызывает?
19 авг 13, 15:36    [14726215]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить