Spis treści:

Kategoria:IdentitySQL Server


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:

INSERT INTO Tabela_2 SELECTFROM Tabela

... 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:

Msg 8101, Level 16, State 1, Line 1 An explicit value for the identity column in table 'Tabela' can only be specified when a column list is used and IDENTITY_INSERT is ON.

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.

CREATE TABLE [Identity]
(
ID int NOT NULL IDENTITY(1,1),
int,
int,
CONSTRAINT PK_ID PRIMARY KEY CLUSTERED(ID)
)

CREATE TABLE [Identity_2]
(
ID int NOT NULL IDENTITY(1,1),
int,
int,
CONSTRAINT PK_ID2 PRIMARY KEY CLUSTERED(ID)
)

Kolejny etap, to uzupełnienie tabeli danymi:

INSERT INTO [Identity] VALUES (1,1)
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:

SET IDENTITY_INSERT [Identity_2] ON
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

, 2013-12-20

Komentarze:

pakamc (2017-06-21 12:09:24)
Mam pytanie o sposób wykonania czynności w ramach jednej tabeli.
Chciałbym skopiować zawartość kolumny X do kolumny Y.
Jakim sposobem najlepiej to wykonać ?
PD (2017-06-21 14:20:32)
Wystarczy najprostsza wersja instrukcji UPDATE:
UPDATE NazwaTabeli SET Y=X
Dodaj komentarz
Wyślij
Ostatnie komentarze
Kalkulator, jak kalkulator, na pewno nie uwzględnia wielu rzeczy. Dla przykładu, jedziemy po asfalcie, ja na rowerze trial (14 kg, opony 29x2,6) a obok mnie kolega na szosie. Robimy te same kilometry w tym samym czasie i niby tyle samo wysiłku włożyliśmy? Druga kwestia, idę na owym rowerze pojeździć po lesie, podjazd, zjazd, piasek etc. To nie to samo co jazda po ścieżce.
Całkiem niezły kalkulator, porównując rezultaty z suunto 9 baro wartości są niemal identyczne z tymże byłoby jeszcze lepiej gdyby dodać prędkość wiatru i przewyższenia. Zdecydowanie najlepszy kalkulator w necie.
Super wyjasnione, czytalo sie bardzo lekko. Dzieki i pozdrawiam
puściłem benta i leci klockiem w pomieszczeniu, w którym kodujemy