SQL Server 2008 - wynika zapytania w trzeciej tabeli

0

Witam,

posiadam w MS SQL Server 2008 trzy tabele o podobnej strukturze (różniące się tylko ilością rekordów i zawartych tam danymi). Z dwóch pierwszych tabel za pomocą zapytania:

SELECT Nazwa, Region FROM Tabela1
EXCEPT
SELECT Nazwa, Region FROM Tabele2

Wybieram różnice, która chce żeby została zapisana w Tabeli3. Jak to najprościej zrobić, proszę o pomoc. Jestem początkowym użytkownikiem MS SQL SERVER 2008.

4

SELECT * INTO NowaTabela FROM (twoje zapytanie) alias

0

jakby ktoś szukał to oracle i postgres ma składnię CREATE TABLE nazwa_tabeli AS (select ...)

0

Sprecyzuje pytanie:

  • mamy bazę nr 1 w niej tabela Mieszkańcy
  • mamy bazę nr 2 w niej tabela Mieszkańcy

Teraz z dwóch tych tabel (w różnych bazach) wybieram różnice (rekordy nie występujące o obu tabelach) za pomocą zapytania:

SELECT * FROM [1].[dbo].Mieszkancy where Typ_mieszkanca='Gosc'
EXCEPT
SELECT * FROM [2].[dbo].Mieszkancy where Typ_mieszkanca='Gosc'

Teraz chce żeby wynik tego zapytania został zapisany w bazie nr: 2 w tabeli Mieszkancy

Używam Microsoft SQL SERVER 2008

0

Z mojego powyższego zamień:
SELECT * INTO NowaTabela
na
INSERT INTO[2].dbo. Mieszkancy SELECT *

0

Utworzyłem poniższe zapytanie które działa:

SELECT * INTO NowaTabela FROM (SELECT * from [1].[dbo].Mieszkancy where Typ_mieszkanca='Gosc' EXCEPT SELECT * FROM [2].[dbo].Mieszkancy where Typ_mieszkanca='Gosc') as tab

Lecz to tworzy tabele z wynikami różnic rekordów. Zapytanie, które dopisuje do bazy nr 2 różnice rekordów do tabeli Mieszkańcy wygląda tak:

Insert INTO [2].dbo.Mieszkancy SELECT * from [1].[dbo].Mieszkancy where Typ_mieszkanca ='Gosc' EXCEPT SELECT * FROM [2].[dbo].Mieszkancy where Typ_mieszkanca='Gosc'

Otrzymuje komunikat o błędzie:

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

Nie wiem może coś źle robię proszę o pomoc.

0

Komunikat jasno mówi: jak chcesz wrzucać własne wartości do kolumny IDENTITY, to MUSISZ wprost wypisać nazwę tej kolumny w INSERT - nie możesz użyć INSERTA domyślnego.
Czyli zamiast INSERT INTO tabela SELECT * musisz zrobić INSERT INTO tabela(id, pole2, pole3,..., wsyzstkie pola z select) SELECT *
Dodatkowo wcześniej musisz włączyć opcję wstawiania wartości do kolumny IDENTITY
robi się to poleceniem SET IDENTITY_INSERT NazwaTabeli ON (coś koło tego - nie pamiętam, bo na MS od 10 lat nie pracuję)
Potem trzeba szybko wykonać inserta i z powrotem wyłączyć (OFF). Bo tylko na JEDNEJ tabeli w danym momencie moze byc włączone

1 użytkowników online, w tym zalogowanych: 0, gości: 1