Jak skopiować zawartość tabeli w SQL Server
Kopiowanie tradycyjne
Kopiowanie danych pomiędzy tabelami nie jest najczęściej zadaniem prostym. O ile przerzucenie danych z prostej tabeli do drugiej identycznej może być równoznaczne z napisaniem następującego zapytania:
... o tyle przeniesienie danych z tabeli, która ma kolumnę IDENTITY, nie jest już tak oczywiste. Wykonanie skryptu zaprezentowanego nieco wcześniej sprawi, że naszym oczom ukaże się komunikat następującej treści:
Tabela ma identity - co robić?
W takim przypadku trzeba skorzystać z opcji IDENTITY_INSERT. Jak się to robi? Aby przedstwić kompletny przykład stwórzmy sobie dwie identyczne tabele z kluczem głównym będącym jednocześnie IDENTITY.
(
ID int NOT NULL IDENTITY(1,1),
A int,
B int,
CONSTRAINT PK_ID PRIMARY KEY CLUSTERED(ID)
)
CREATE TABLE [Identity_2]
(
ID int NOT NULL IDENTITY(1,1),
A int,
B int,
CONSTRAINT PK_ID2 PRIMARY KEY CLUSTERED(ID)
)
Kolejny etap, to uzupełnienie tabeli danymi:
INSERT INTO [Identity] VALUES (2,2)
INSERT INTO [Identity] VALUES (3,3)
INSERT INTO [Identity] VALUES (4,4)
INSERT INTO [Identity] VALUES (5,5)
INSERT INTO [Identity] VALUES (6,6)
DELETE FROM [Identity] WHERE A=3
A na koniec operacja właściwa:
INSERT INTO [Identity_2](ID,A,B) SELECT ID,A,B FROM [Identity]
SET IDENTITY_INSERT [Identity_2] OFF
Ważne w ostatniej operacji jest to, aby jawnie podać listę kolumn. Niedozwolone jest użycie *, chociaż w zwykłych zapytaniach jest to równoważne. Dość uciążliwe może być właśnie to jawne podawanie wszystkich kolumn, ale i na to jest sposób. Jak wygenerować sobie listę kolumn wyjaśnię innym razem, w oddzielnym wpisie.
Kategoria:IdentitySQL Server
Komentarze:
Chciałbym skopiować zawartość kolumny X do kolumny Y.
Jakim sposobem najlepiej to wykonać ?