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

Откуда: РФ
Сообщений: 253
Доброе время суток.
Нужно увеличить размерность проиндексированного поля.
Пишу: ALTER TABLE t1 ALTER COLUMN name char(200)
Ругается, что "индекс ix_name зависит от столбец name".
Проверял на 2005 и 2008 сервере... на 2000 сервере такого не наблюдается.
Пришлось делать DROP INDEX - ALTER COLUMN - CREATE INDEX...
...а как это сделать по другому?
15 май 13, 15:31    [14299915]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
iap
Member

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

я так думаю, индекс-то должен быть перестроен по-любому...
15 май 13, 15:35    [14299946]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
iap
я так думаю, индекс-то должен быть перестроен по-любому...


Поддержу. Буквально на днях менял структуру таблицы, пришлось drop/create.

P.S. Если таблица не особо большая, то норм.
15 май 13, 15:39    [14299989]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
Glory
Member

Откуда:
Сообщений: 104751
filll
на 2000 сервере такого не наблюдается.

Не придумывайте

ALTER COLUMN

The altered column cannot be:

...
Used in an index, unless the column is a varchar, nvarchar, or varbinary data type, the data type is not changed, and the new size is equal to or larger than the old size.

Used in a PRIMARY KEY or [FOREIGN KEY] REFERENCES constraint.

...

Цитата одинакова в хелпах всех версий
15 май 13, 15:43    [14300036]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Сергей Викт.,
если использовать varchar вместо char, то увеличение размерности происходит без необходимости удалять индекс
15 май 13, 15:44    [14300053]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
Shakill
Сергей Викт.,
если использовать varchar вместо char, то увеличение размерности происходит без необходимости удалять индекс
Сейчас-то это не поможет: надо изменить тип!
15 май 13, 15:49    [14300111]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Так я ж не спорю ни с кем) И никому не даю советов) Просто написал, как поступил я. Плюс мне необходимо было изменить тип данных в 2х ключевых столбцах. В общем я удалил и тупо пересоздал индекс после изменения))
15 май 13, 15:49    [14300121]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
filll
Member

Откуда: РФ
Сообщений: 253
Уважаемый Glory, наверно я что-то перепутал насчет 2000... на всякий случай проверю еще раз.
Спасибо, попробую варчар использовать.
15 май 13, 15:52    [14300151]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
filll
Member

Откуда: РФ
Сообщений: 253
Shakill,
на varchar ругается точно так же как и на char :(
15 май 13, 15:59    [14300218]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
Glory
Member

Откуда:
Сообщений: 104751
filll
на varchar ругается точно так же как и на char :(

Потому что вы меняете тип поля

use tempdb
go
if object_id('dbo.test1') is not null drop table dbo.test1
go
create table dbo.test1(f1 varchar(50))
go
create index idx1 on dbo.test1(f1)
go
insert dbo.test1 values('AAA')
go
select COLUMNPROPERTY(OBJECT_ID('dbo.test1'), 'f1', 'Precision') as 'BEFORE'
go
alter table dbo.test1 alter column f1 varchar(100)
go
select COLUMNPROPERTY(OBJECT_ID('dbo.test1'), 'f1', 'Precision') as 'AFTER'
15 май 13, 16:04    [14300287]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
filll
Shakill,
на varchar ругается точно так же как и на char :(
На изменение типа?
Правильно. Выше же цитата была про "data type is not changed"!
Надеюсь, тип меняется на VARCHAR() сразу с нужным размером?
15 май 13, 16:06    [14300302]     Ответить | Цитировать Сообщить модератору
 Re: ALTER COLUMN (проиндексированный)  [new]
filll
Member

Откуда: РФ
Сообщений: 253
Glory,
спасибо, я понял, что увеличить размерность варчара можно без удаления индекса.

iap,
да, изначально вопрос стоял про "как это сделать не меняя тип поля".,
но я попробовал с изменением с чара на варчар. не прошло.
15 май 13, 16:13    [14300373]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить