SQL Server

7 отговора 329 прегледа
#1

SQL Server

Znaete li kak da setna Identity na kolona s tsql

10x

Отговор
в отговор на i #2

Re: SQL Server

Ами от това, което разбирам (поправи ме ако нещо не съм разбрал напълно), Identity не би трябвало да има смисъл да се модифицира въобще, а напротив - трябва само да се увеличава според както си го задал в дефиницията на таблицата. Еквивалента на auto_increment в MySQL.

Идеята е да е unique identifier на даден ред в таблицата, обикновено се използва за primary key.

Защо не използваш някоя твоя колона от тип int, примерно Counter или CustomID и да модифицираш нея? Защо искаш да променяш ръчно точно Identity ?

Отговор
в отговор на i #3

Re: SQL Server

по принцип съм съглaсен с гуру, но ако все пак МНОГО искаш, погледни
SET IDENTITY_INSERT
това се ползва основно при replication

Отговор
в отговор на Гypy #4

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.

Отговор
в отговор на Rince #5

Re: SQL Server

Tova ne me ustroiva :(.

Отговор
в отговор на i #6

Re: SQL Server

доколкото разбрах от другия ти пост искаш да направиш нещо като :

ALTER TABLE table1 ALTER COLUMN id ADD IDENTITY (1, 1)

е, това няма как да стане.
единствения начин е с междинна колона (създаваш нова колона, копираш данни и т.н.) или междинна таблица (като горното)

ако не е задължително да стане с TSQL пробвай с EnterpraZ. manager.
managera го прави вътрешно с междинна таблица

Отговор
в отговор на i #7

Re: SQL Server

така директно, като да е с ALTER нещо си май неможе...

ама може да опиташ да заобиколиш камика, като копираш данните във временна таблица, бастисаш съществуващата /цялата таблица?!?/ и преименуваш временната таблица с името на оригиналната (идеята е от скрипта който генерира ентерпраз манагера)



/*
те това е оригиналната таблица, пъхни 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.
Отговор
в отговор на Hateras #8

Re: SQL Server

To4no tova se opitvam da izbegna

Отговор