Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ROWGUIDCOL+sp_rename = Cannot alter column 'ID' because it is 'ROWGUIDCOL'.  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Есть табличка

create table Table1(ID uniqueidentifier not null rowguidcol primary key)

есть много табличек, ссылающихся на эту

при попытке сделать
alter table dbo.Table1 alter column ID drop rowguidcol
go
exec sp_rename 'Table1.ID','Id','COLUMN'
go

получаю ошибку
Msg 4928, Level 16, State 1, Procedure sp_rename, Line 520
Cannot alter column 'ID' because it is 'ROWGUIDCOL'.

повторный запуск alter table dbo.Table1 alter column ID drop rowguidcol дает
Msg 4926, Level 16, State 0, Line 2
ALTER TABLE ALTER COLUMN DROP ROWGUIDCOL failed because a column does not exist in table 'Table1' with ROWGUIDCOL property.

is_rowguidcol в sys.columns равно 0


На мини-репро, сляпанном из двух таблиц - такого не наблюдается

create table _test(ID uniqueidentifier rowguidcol primary key)
go
create table _test2(ID uniqueidentifier references _test(id))
go
select * from _test
go
alter table _test
alter column ID drop rowguidcol
go
exec sp_rename 'dbo._test.ID','Id','COLUMN'
go
select * from _test
go
drop table _test2
go
drop table _test
go


ID
------------------------------------

(0 row(s) affected)

Caution: Changing any part of an object name could break scripts and stored procedures.
Id
------------------------------------

(0 row(s) affected)

автор
Microsoft SQL Server 2005 - 9.00.5069.00 (X64)
Aug 22 2012 18:02:46
Copyright (c) 1988-2005 Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)



вопрос: куда бежать и что делать?

-------------------------
There’s no silver bullet!
28 янв 14, 21:04    [15484913]     Ответить | Цитировать Сообщить модератору
 Re: ROWGUIDCOL+sp_rename = Cannot alter column 'ID' because it is 'ROWGUIDCOL'.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
locky,

А вот так наблюдается:
create table _test(ID uniqueidentifier rowguidcol primary key)
go
create table _test2(ID uniqueidentifier references _test(id))
go
select * from _test
go
/*alter table _test
alter column ID drop rowguidcol
go
*/
exec sp_rename 'dbo._test.ID','Id','COLUMN'
go


(0 row(s) affected)
Внимание! Изменение любой части имени объекта может разрушить сценарии и хранимые процедуры.
Msg 4928, Level 16, State 1, Procedure sp_rename, Line 547
Невозможно изменить столбец "ID", так как он является "ROWGUIDCOL".
Msg 0, Level 20, State 0, Line 0
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы.

Судя по тому, что ошибка:

Msg 4928, Level 16, State 1, Procedure sp_rename, Line 520
Cannot alter column 'ID' because it is 'ROWGUIDCOL'.

в оригинале идет из sp_rename, она была вызвана ДО того, как был вызван ALTER, сносящий свойство ROWGUIDCOL.

ЗЫ. Номер строки с ошибкой отличается, ибо воспроизводилось на:

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4279.0 (X64) 
Mar 26 2013 17:33:13
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
28 янв 14, 22:33    [15485187]     Ответить | Цитировать Сообщить модератору
 Re: ROWGUIDCOL+sp_rename = Cannot alter column 'ID' because it is 'ROWGUIDCOL'.  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
pkarklin,

не, ну если не дропать свойство с колонки - то оно конечно :)

Я начинаю склоняться к тому что где-то видимо у меня какая-то малозаметная опечатка в скриптах - сомнительно что я натолкнулся на неизвестный баг.
28 янв 14, 23:29    [15485374]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить