Страница 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