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

Откуда: SPb
Сообщений: 3
Собственно сабж.
на такой запрос:

UPDATE [syscolumns]
SET collationid = 53269
WHERE (collationid <> 53269)

Выдает ошибку:
Ad hoc updates to system catalogs are not enabled. The system administrator must reconfigure SQL Server to

Что за reconfigure необходимо чтобы allow this?

Если такой вариант не подойдет, то остается через скрипты которые есть на форуме. но не нашел решения проблемы с ключевыми полями и прочими constraints.
Нет ли у кого такого скрипта который бы сохранял необходимые CONSTRAINTs а потом их воссоздавал?


П.С. кто-то тут на форуме спрашивал про проблемы с text и ntext при смене collation. я сделал так:(может кому пригодится). Кидаю весь скрипт целиком, у меня он работает. ntext&text выделил

DECLARE @sCollation nvarchar(1024)
SET @sCollation = 'Cyrillic_General_CI_AS'

DECLARE @db nvarchar(128)
SET @db = DB_NAME()
EXEC ('USE master ALTER DATABASE ' + @db + ' COLLATE ' + @sCollation)

DECLARE @sSql nvarchar(1024)

DECLARE @sTbl nvarchar(128)
DECLARE @sClmn nvarchar(128)
DECLARE @sDbType nvarchar(128)
DECLARE @nCharMaxLen int

DECLARE curSqls CURSOR LOCAL FAST_FORWARD READ_ONLY

FOR SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG=@db AND
((DATA_TYPE LIKE '%char%') OR (DATA_TYPE LIKE '%text%')) AND
COLLATION_NAME IS NOT NULL AND
COLLATION_NAME <> @sCollation AND
TABLE_NAME in (SELECT o.name FROM sysobjects o WHERE (o.xtype = 'U'))
OPEN curSqls
FETCH NEXT FROM curSqls INTO @sTbl, @sClmn, @sDbType, @nCharMaxLen

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Table - ' + @sTbl + ' Column - ' + @sClmn
IF @sDbType = 'ntext' OR @sDbType = 'text'
BEGIN
DECLARE @sTmpClmn nvarchar(140)
SET @sTmpClmn = @sClmn + '_tmp' + CAST( CAST( (RAND() * 100000) AS int) as nvarchar)

PRINT 'Table - ' + @sTbl + ' TmpColumn - ' + @sTmpClmn + ' DBTYPE - ' + @sDbType
EXEC('ALTER TABLE [' + @sTbl + '] ADD [' + @sTmpClmn + '] ' + @sDbType + ' COLLATE ' + @sCollation)
EXEC('UPDATE [' + @sTbl + '] SET [' + @sTmpClmn + '] = [' + @sClmn + ']')
EXEC('ALTER TABLE [' + @sTbl + '] DROP COLUMN ' + @sClmn)
EXEC('sp_rename ''' + @sTbl + '.[' + @sTmpClmn + ']'', [' + @sClmn + '], ''COLUMN''')

END
ELSE
BEGIN
SET @sSql = 'ALTER TABLE [' + @sTbl + '] ALTER COLUMN [' + @sClmn + '] ' + @sDbType
IF ( NOT(@nCharMaxLen IS NULL) OR (@nCharMaxLen=0) )
SET @sSql = @sSql + '(' + CAST(@nCharMaxLen AS nvarchar) + ')'
SET @sSql = @sSql + ' COLLATE ' + @sCollation

PRINT @sSql
EXEC (@sSql)

END
FETCH NEXT FROM curSqls INTO @sTbl, @sClmn, @sDbType, @nCharMaxLen
END

CLOSE curSqls
DEALLOCATE curSqls
3 авг 07, 14:57    [4476698]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
не трогайте системные таблицы....руки вам сисадмин оторвёт потом
3 авг 07, 15:03    [4476745]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
Evgeny K.
Member

Откуда: SPb
Сообщений: 3
Knyazev Alexey
не трогайте системные таблицы....руки вам сисадмин оторвёт потом


но как их "потрогать"?

а с сисадмином уж можно договориться, то есть с самим собой :)
3 авг 07, 15:15    [4476868]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
sp_configure, опция "allow updates". Насчет проблем - потом не говорите, что вас не предупредили...
3 авг 07, 15:29    [4476999]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
Spirit
Member

Откуда: Краснодар
Сообщений: 160
sp_configure 'allow updates' ,1
go
reconfigure
go

и это.... осторожнее с изменениями... уверены, что на 100% знаете, где и что менять напрямую в системных таблицах?
3 авг 07, 15:30    [4477001]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
Evgeny K.
Member

Откуда: SPb
Сообщений: 3
Spirit
sp_configure 'allow updates' ,1
go
reconfigure
go

и это.... осторожнее с изменениями... уверены, что на 100% знаете, где и что менять напрямую в системных таблицах?


спасибо за 'allow updates'!

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


Есть конечно опасения что не стоит так делать. ведь в описании о "законном" изменении collations много ограничений, что предполагает какую-то постобработку при смене collations, которая в данном методе не производиться.

Имеються ли какие-то веские аргумнты против такого метода? :)
3 авг 07, 15:59    [4477264]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Evgeny K.

Имеються ли какие-то веские аргумнты против такого метода? :)

Здравый смысл не лезть в системные объекты прямыми запросами является веским аргументом ?
А стоимость потерянной в результате таких запросов базы данных ?
А затраты на ее восстановление ?
3 авг 07, 16:20    [4477404]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Возможно ли поменять collation через syscolumns?  [new]
гобо
Guest
а как сабж для 2005 сделать?

делаю:

sp_configure 'allow_updates', 1
go
reconfigure with override
go
update a set collationid = 53269
From sys.syscolumns a join sysobjects b on a.id=b.id
--Join INFORMATION_SCHEMA.TABLES c on b.name=c.TABLE_NAME
--Where table_type='base table'
and a.collationid=1778438152
go
sp_configure 'allow_updates', 0
go
reconfigure with override
go

получаю:

Нерегламентированные обновления системных каталогов запрещены.
28 дек 09, 18:20    [8128984]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
лутше не делать,если даже етого не знаете, тем более в 2005 и выше, только етим не обойдется
-------------------------------------
Jedem Das Seine
28 дек 09, 18:30    [8129018]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
Glory
Member

Откуда:
Сообщений: 104760
гобо
Нерегламентированные обновления системных каталогов запрещены.

разумеется получаете. Потому что все теперь почти все системные таблицы базы master являются всего лишь представлениями
28 дек 09, 18:39    [8129050]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
гобо
Guest
а как же мне поменять коллэйшн у кучи столбцов
28 дек 09, 18:53    [8129092]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли поменять collation через syscolumns?  [new]
Glory
Member

Откуда:
Сообщений: 104760
гобо
а как же мне поменять коллэйшн у кучи столбцов

через команду alter table
или через создание новой таблицы
28 дек 09, 19:05    [8129134]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить