[MSSQL] Jak wrzucić do tabeli rekordy, gdy pojawił się błąd

0

Cześć, temat może niejasny, ale nie wiedziałem, jak to opisać.

Mam tabelę tymczasową.
Tworzę ją tak:

CREATE TABLE #temp_alertLog(
      ID bigint not null,
      date DATETIME not null,
      sourceIP varchar(15) not null unique,
      inputDescription text)

Jak widać pole sourceIP ma być unikalne.

Teraz muszę kopiować do niej rekordy z innej tabeli "czwórkami".
Dlatego czwórkami, bo poprawnie wyglądająca tabela źródłowa może mieć takie dane(podaje tylko sourceIP, reszta nie ważna)

192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
...

Oczywiście może się coś zdarzyć, że tabela źródłowa nie została poprawnie wypełniona i wtedy wpisy mogą wyglądać tak:

192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.1

192.168.0.2
192.168.0.3
192.168.0.4

Dlatego wpadłem na pomysł, że pole sourceIP w tabeli tymczasowej musi być unique, żebym zawsze miał taką jedną serię danych.

Niestety, okazuje się, że po wykonaniu:

begin try
  insert into #temp_alertLog
    select top(4)id, date, sourceIP, inputDescription 
    from guest_log
    where type = 84 and id>@curID --@curID to pewna liczba
    order by id    
end try
begin catch
         --
end catch    

gdy tabela źródłowa jest nieprawidłowa(unikalność pola sourceIP jest zaburzona)
tabela tymczasowa jest pusta. A chodzi mi o to, żeby tabela tymczasowa miała wszystkie rekordy, które jej wkładam oprócz tych powodujących błąd. Jak coś takiego osiągnąć?

0

Spróbuj skorzystać z klauzuli NOT EXISTS, tj. w klauzuli WHERE dodaj warunek na nieistnienie rekordu (identyfikowanego m.in. przez IP) w tabeli tymczasowej.

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