Страница 1 из 1
MS SQL identity
Добавлено: 16 июн 2003, 18:39
Lepsik
-- ALTER TABLE Employee alter column id int identity (1,1)
а почему такая команда не проходит ?
Server: Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'identity'.
потому что есть записи ?
-- это проходит
ALTER TABLE Employee add ids int identity (1,1)
Добавлено: 16 июн 2003, 20:15
папа Карло
повесить данное проперти на существующую колонку нельзя. period.

Добавлено: 17 июн 2003, 08:15
Lepsik
но ведь ручками в манагере вешается без проблем.
да и лежат там сплошь уникальные числа
Добавлено: 17 июн 2003, 09:58
папа Карло
Lepsik писал(а):но ведь ручками в манагере вешается без проблем.
да и лежат там сплошь уникальные числа
не верь глазам своим. они делают drop/create table через временную таблицу скорее всего.

Добавлено: 25 июн 2003, 23:44
Lepsik
>>они делают drop/create table через временную таблицу скорее всего
издеваешся ? может убивают - добавляют колонку ?
Добавлено: 26 июн 2003, 07:09
папа Карло
они реально могут делать что угодно. это МС. они знают "кишки" скл сервера. просто пересоздать таблцу с точки зрения схемы намного проще если нет много данных в ней

Добавлено: 26 июн 2003, 08:56
Lepsik
да это типа был баг. только странный. открыл -закрыл манагер и все прошло
Добавлено: 26 июн 2003, 09:01
папа Карло
был подобный баг в скл сервере только там про налы и внешние ключи. я зарепортил этот баг очень давно. потом они написали что баг пофиксен в первом сервис паке, но я реально видел его и после этого на машинах с установленным сервис паком

другими словами. это может быть баг. или кто-то уже успел вставить запись с налом. сделай все в одной транзакции и апдейт и альтер тейбл....

Добавлено: 14 авг 2003, 11:09
Lepsik
папа Карло писал(а):они реально могут делать что угодно. это МС. они знают "кишки" скл сервера. просто пересоздать таблцу с точки зрения схемы намного проще если нет много данных в ней

оказалось, что drop/create table в 3-4 раза быстрее, чем add/drop column (как вы понимаете, в тесте приходится зацикливать и drop column для упрощения)
create table ad (id int, n varchar(100), d datetime)
declare @i int
select getdate()
set @i=0
while @i<100 begin
alter table ad add f real
alter table ad drop column f
set @i=@i+1
end
select getdate()
set @i=0
while @i<100 begin
drop table ad
create table ad (id int, n varchar(100), d datetime)
set @i=@i+1
end
select getdate()
drop table ad