SQL Server
7 отговора
329 прегледа
Re: SQL Server
Ами от това, което разбирам (поправи ме ако нещо не съм разбрал напълно), Identity не би трябвало да има смисъл да се модифицира въобще, а напротив - трябва само да се увеличава според както си го задал в дефиницията на таблицата. Еквивалента на auto_increment в MySQL.
Идеята е да е unique identifier на даден ред в таблицата, обикновено се използва за primary key.
Защо не използваш някоя твоя колона от тип int, примерно Counter или CustomID и да модифицираш нея? Защо искаш да променяш ръчно точно Identity ?
Идеята е да е unique identifier на даден ред в таблицата, обикновено се използва за primary key.
Защо не използваш някоя твоя колона от тип int, примерно Counter или CustomID и да модифицираш нея? Защо искаш да променяш ръчно точно Identity ?
Re: SQL Server
по принцип съм съглaсен с гуру, но ако все пак МНОГО искаш, погледни
SET IDENTITY_INSERT
това се ползва основно при replication
SET IDENTITY_INSERT
това се ползва основно при replication
Re: SQL Server
Imam edna kolona, koiato ne e Identity. Triabva mi tsql kod s koito da ia napravia Identity. Neshto kato alter table..., no kolona.
Nalaga se. Za da obiasna situaciata triabva da izpisha nikolko stranici.
Nalaga se. Za da obiasna situaciata triabva da izpisha nikolko stranici.
Re: SQL Server
доколкото разбрах от другия ти пост искаш да направиш нещо като :
ALTER TABLE table1 ALTER COLUMN id ADD IDENTITY (1, 1)
е, това няма как да стане.
единствения начин е с междинна колона (създаваш нова колона, копираш данни и т.н.) или междинна таблица (като горното)
ако не е задължително да стане с TSQL пробвай с EnterpraZ. manager.
managera го прави вътрешно с междинна таблица
ALTER TABLE table1 ALTER COLUMN id ADD IDENTITY (1, 1)
е, това няма как да стане.
единствения начин е с междинна колона (създаваш нова колона, копираш данни и т.н.) или междинна таблица (като горното)
ако не е задължително да стане с TSQL пробвай с EnterpraZ. manager.
managera го прави вътрешно с междинна таблица
Re: SQL Server
така директно, като да е с ALTER нещо си май неможе...
ама може да опиташ да заобиколиш камика, като копираш данните във временна таблица, бастисаш съществуващата /цялата таблица?!?/ и преименуваш временната таблица с името на оригиналната (идеята е от скрипта който генерира ентерпраз манагера)
както се забелезва, няма PK/FK и ТНТМ.
НАПРАВИ СИ бекъп ПРЕДИ да приложиш тая процедура на нещо което се използва...
Am I evil?
Yes I am.
ама може да опиташ да заобиколиш камика, като копираш данните във временна таблица, бастисаш съществуващата /цялата таблица?!?/ и преименуваш временната таблица с името на оригиналната (идеята е от скрипта който генерира ентерпраз манагера)
/*
те това е оригиналната таблица, пъхни 2-3 записа колкото да има за пробата
CREATE TABLE Table1 (
col1 INT NOT NULL,
col2 VARCHAR(20) NULL
)
*/
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_Table1
(
col1 int NOT NULL IDENTITY (1, 1),
col2 varchar(20) NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_Table1 ON
GO
IF EXISTS(SELECT * FROM dbo.Table1)
EXEC('INSERT INTO dbo.Tmp_Table1 (col1, col2)
SELECT col1, col2 FROM dbo.Table1 TABLOCKX')
GO
SET IDENTITY_INSERT dbo.Tmp_Table1 OFF
GO
DROP TABLE dbo.Table1
GO
EXECUTE sp_rename N'dbo.Tmp_Table1', N'Table1', 'OBJECT'
GO
COMMIT
както се забелезва, няма PK/FK и ТНТМ.
НАПРАВИ СИ бекъп ПРЕДИ да приложиш тая процедура на нещо което се използва...
Am I evil?
Yes I am.