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

Откуда:
Сообщений: 710
Добрый день !
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4319.0 (X64) Jun 17 2014 18:50:01 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Сервер выше имеет collation Cyrillic_General_100_CI_AS на нём была создана БД с естественно таким же collation, ибо умолчания никто не менял. Затем в эту БД стали переливать инфу с другого сервера с collation Cyrillic_General_CI_AS как сервера, так и БД. В результате сейчас прогер сказал что он устал уже писать в коде
left join 
       @baseitem bi on bi.item = i.item collate Cyrillic_General_CI_AS left join

автор
left join #note n on n.co_num collate Cyrillic_General_100_CI_AS = ci.co_num
WHERE co.order_date >= @StartDate and co.order_date <= @EndDate and co.type <> 'E'

и прочие. Спросил можно ли поменять collation БД с которой он работает на Cyrillic_General_CI_AS как и у искомой с которой идёт переливка, я сказал что можно, но порядок сортировки всех уже перелитых существующих полей задействованных в collation не поменяется.

Вопрос: каким образом можно изменить collation всех уже существующих структур БД ?

З.Ы.: проблемы трудоёмкости со стороны изменения кода не рассматриваем, потому что только недавно начали работать в такой манере и на данный момент проще будет сменить collation БД и подправить везде код, чем ждать пока образуется критическая масса этого самого кода со сторонним collation.
4 дек 15, 10:14    [18512237]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
pXn
Member

Откуда: Косопузая
Сообщений: 45
stavgreengo,

alter database collate
4 дек 15, 10:26    [18512276]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
А если в свойствах базы поменять руками, не поможет?

К сообщению приложен файл. Размер - 143Kb
4 дек 15, 10:36    [18512334]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
pXn
stavgreengo,

alter database collate

Это понятно. Меня же интересует COLLATE в инструкции ALTER TABLE.

Ещё раз. Мне надо изменить сортировку уже всех вуществующих структур в БД, помимо простого смена свойства сортировки в самой БД. Пока нашёл только это http://stackoverflow.com/questions/18122773/change-collations-of-all-columns-of-all-tables-in-sql-server
Есть у кого предложения лучше ?
4 дек 15, 10:39    [18512348]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
mishanya3624,

на кнопку "Скрипт" тыкните и посмотрите, какая команда выполнится на сервере.
4 дек 15, 10:40    [18512351]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
pXn
Member

Откуда: Косопузая
Сообщений: 45
mishanya3624,
Это действие выполняет тот же самое.

Почитайте прежде тут:
[url=]https://msdn.microsoft.com/ru-ru/library/ms174269(v=sql.105).aspx[/url]
раздел "Изменение параметров сортировки в базе данных"
4 дек 15, 10:42    [18512361]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
... данные котроые уже есть - один фиг прийдеться конвертить к нужному коллейшину.
Я б пересозда БД с нуля и перелили бы... будет быстрее чем писать кучяу скриптов
4 дек 15, 10:43    [18512368]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
воу воу воу парни, не кипешуйте, все ровно, я долго делал скрин(отвлекали) а предыдущего поста не было еще, когда я открыл тему.
4 дек 15, 10:50    [18512404]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
pXn
Member

Откуда: Косопузая
Сообщений: 45
stavgreengo
Это понятно. Меня же интересует COLLATE в инструкции ALTER TABLE.

Ещё раз. Мне надо изменить сортировку уже всех вуществующих структур в БД, помимо простого смена свойства сортировки в самой БД. Пока нашёл только это http://stackoverflow.com/questions/18122773/change-collations-of-all-columns-of-all-tables-in-sql-server
Есть у кого предложения лучше ?
Тогда как предложил Maxx
Maxx
пересозда БД с нуля и перелили бы
4 дек 15, 11:17    [18512604]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
stavgreengo
Есть у кого предложения лучше ?
А чем найденный способ не устроил? Много зависимых объектов от изменяемых столбцов?

Тогда можете попробовать напрямую изменить collation в метаданных - в таблице sys.syscolpars.
Затем перестроить все зависимые индексы.
4 дек 15, 11:19    [18512622]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
o-o
Guest
stavgreengo
Сервер выше имеет collation Cyrillic_General_100_CI_AS
left join #note n on n.co_num collate Cyrillic_General_100_CI_AS = ci.co_num
WHERE co.order_date >= @StartDate and co.order_date <= @EndDate and co.type <> 'E'

можно ли поменять collation БД с которой он работает на Cyrillic_General_CI_AS

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

ок, может временная таблица создана через SELECT INTO из таблицы,
где все столбцы имеют Cyrillic_General_CI_AS.
ну так значит данные перекодировать не надо, у всех столбцов уже нужный Cyrillic_General_CI_AS.
а чтобы он выставлялся по умолчанию еще и столбцам вновь создаваемых объектов,
достаточно этой базе выставить Cyrillic_General_CI_AS.
4 дек 15, 11:24    [18512648]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Maxx
Я б пересозда БД с нуля и перелили бы... будет быстрее чем писать кучяу скриптов


Я бы сервер переустановил с нужным collation, так оно вернее. И перезалил таблицы экспортом.
4 дек 15, 11:27    [18512666]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
stavgreengo
В результате сейчас прогер сказал что он устал уже писать в коде
Ну, хорошая проверка прогера на профпригодность :-)
Нужно не писать приведение к единому колелйту в запросах (что очень вредно), а при создании временных таблиц делать строковые поля с коллейтом database_default

Бесит, кода каждый суперпрограммист требует для своего "произведения" отдельный сервер с такими, и только такими! настройками. Иначе всё валится напрочь.
4 дек 15, 12:46    [18513347]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
pXn
Member

Откуда: Косопузая
Сообщений: 45
Владислав Колосов
Maxx
Я б пересозда БД с нуля и перелили бы... будет быстрее чем писать кучяу скриптов


Я бы сервер переустановил с нужным collation, так оно вернее. И перезалил таблицы экспортом.

Владислав, а чем плох подход с пересозданием БД? Конечно, если позволяют ресурсы и технологическое окно допустимо.

Модификация объектов красивее, не спорю :)
4 дек 15, 13:03    [18513481]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
Владислав Колосов
Member

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

с системными базами намучаетесь, особенно с tempdb.
4 дек 15, 13:05    [18513492]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
o-o
Guest
alexeyvg
Бесит, кода каждый суперпрограммист требует для своего "произведения" отдельный сервер с такими, и только такими! настройками. Иначе всё валится напрочь.

ну вообще-то и вменяемый админ, выбирая серверный коллэйшен,
мог бы и поинтересоваться, какого коллэйшена базы будут там обитать.
ведь по сути это как если б поставили сервер с латинским коллэйшеном
под кириллическую базу.
ошибка ровно та же, у сервера коллэйшен, отличающийся от коллэйшена базы
4 дек 15, 13:12    [18513542]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
o-o
ведь по сути это как если б поставили сервер с латинским коллэйшеном
под кириллическую базу.
ошибка ровно та же, у сервера коллэйшен, отличающийся от коллэйшена базы
Да я понимаю, я просто считаю это не ошибкой "в общем случае". Это ошибка разработчиков, вот это точно.

Чем руководствовался разработчик, когда принимал решение написать код, который вываливается с ошибкой, если коллейшены при установке сервера и при создании базы не совпадают? Он хотел получить профит по производительности? Ещё что то? Я даже не представляю, что можно полезного получить.
У меня она версия - он лабал по принципу: "скопипастил из инета, ошибка, пять случайных правок, заработало на моём компе, таск закрываем". А у вас? :-)

Ошибка админов конечно тоже есть, но не в том, что "поставили сервер с латинским коллэйшеном
под кириллическую базу", это как раз нормально, а в том, что админ должен был узнать требования для установки ПО, даже если они вызваны неграмотностью разработчиков.
4 дек 15, 13:25    [18513617]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Владислав Колосов
Maxx
Я б пересозда БД с нуля и перелили бы... будет быстрее чем писать кучяу скриптов


Я бы сервер переустановил с нужным collation, так оно вернее. И перезалил таблицы экспортом.

да фиг с ним с вервером т о.. яб LUNы пересоздал бы все на SANе и по новой усе Чтоб неверняка
4 дек 15, 14:33    [18514201]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
Владислав Колосов
Member

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

смех смехом, а успех действительно зависит от корней.
4 дек 15, 14:53    [18514365]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Владислав Колосов
Maxx,

смех смехом, а успех действительно зависит от корней.

Коллейт БД и всех объектов внутри неё я поменял, но что самое интересное вы правы) вообщем легче сервер на нужный коллейт переустановить, ибо куча временных таблиц в запросах, а на tempdb коллейт по умолчанию как на сервере, а это Cyrillic_General_100_CI_AS, а там его поменять мы не можем, потому что на этом сервере ещё куча приложений и гораздо более важных чем-то ради которого мы заморачивались с коллейтами. Вот и приплыли) Посовещавшись пришли к выводу, что программист не перетрудиться и лучше пусть дальше в коде до скончания времён сопоставление коллейтов организовывает.
4 дек 15, 15:01    [18514409]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
stavgreengo
Владислав Колосов
Maxx,

смех смехом, а успех действительно зависит от корней.

Коллейт БД и всех объектов внутри неё я поменял, но что самое интересное вы правы) вообщем легче сервер на нужный коллейт переустановить, ибо куча временных таблиц в запросах, а на tempdb коллейт по умолчанию как на сервере, а это Cyrillic_General_100_CI_AS, а там его поменять мы не можем, потому что на этом сервере ещё куча приложений и гораздо более важных чем-то ради которого мы заморачивались с коллейтами. Вот и приплыли) Посовещавшись пришли к выводу, что программист не перетрудиться и лучше пусть дальше в коде до скончания времён сопоставление коллейтов организовывает.
при создании временных таблиц в символьных полях писать collation databaze default и всего делов
я так давно уже работаю и нет проблем
4 дек 15, 15:44    [18514645]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
stavgreengo
Посовещавшись пришли к выводу, что программист не перетрудиться и лучше пусть дальше в коде до скончания времён сопоставление коллейтов организовывает.
Так вы не согласны с тем, что "сопоставление коллейтов" - это плохой вариант, хуже, чем писать collation databaze default?
4 дек 15, 17:59    [18515472]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
serpentariy
Member

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

Только не collation databaze default, а collate database_default )))
4 дек 15, 21:50    [18516205]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
leov
Member

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

Только не collation databaze default, а collate database_default )))
таки да ))) по памяти написал. обычно такие вещи копипастю
4 дек 15, 21:55    [18516224]     Ответить | Цитировать Сообщить модератору
 Re: Изменить collation для всех существующих структур БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
serpentariy
Только не collation databaze default, а collate database_default )))

Да, я я выше так написал:
alexeyvg
при создании временных таблиц делать строковые поля с коллейтом database_default

А потом другое процитировал.

Но это в общем неважно, синтаксис можно и в хелпе посмотреть. Главное, что ИМХО правильно так, а не приведение коллейтов в запросе.

Вот мне и интересно, почему вы предпочли приведение...
4 дек 15, 23:37    [18516680]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить