Musisz wstawić wiele rekordów do tabeli SQL. Jeśli są duplikaty (już wstawione rekordy), chcę je zignorować. Do wysyłania wielu rekordów z mojego kodu do SQL używam parametru o wartości tabeli.
Poniżej znajduje się zapytanie. Działa podczas pierwszego wstawiania, gdy w tabeli nie ma żadnych wierszy. Przy kolejnym wstawianiu nie są dodawane żadne wiersze.
@tvpNewFMdata jest parametrem o wartości tabeli.
INSERT INTO
[dbo].[FMData]
(
[Id],
[Name],
[Path],
[CreatedDate],
[ModifiedDate]
)
SELECT
fm.Id, fm.Name, fm.Path, GETUTCDATE(), GETUTCDATE()
FROM
@tvpNewFMdata AS fm
WHERE
NOT EXISTS
(
SELECT
tbl.[Id]
FROM
[dbo].[FMdata] AS tbl
WHERE
tbl.Id = fm.Id
)
Nie jestem w stanie ustalić, co powoduje, że pierwsze wstawianie działa, ale nie po raz drugi.
Próbowałem nawet usunąć klauzulę WHERE NOT EXISTS i działało to tylko przy pierwszym wstawieniu. Kolejne wstawienie nie dodaje żadnych wierszy do tabeli.
Odpowiedzi:
1 dla odpowiedzi № 1Wystąpił błąd lub po prostu nie wstawiono wierszy? Jeśli nie wstawiono żadnych wierszy, nawet z usuniętą klauzulą where, brzmi to tak, jakbyś miał problemy z zapełnieniem param wartości tabeli. Czy widziałeś, co wysyłasz do SQL za pośrednictwem punktu przerwania lub SQL Server Profiler?
Czy zamiast gdzie istnieje, próbowałeś lewy łączyć się z fmData i wstawiałeś tylko tam, gdzie wiersz fmData ma wartość null?
Zgadzam się z Damienem, to nie jest wkładka luzem.
0 dla odpowiedzi nr 2
Przepraszam. Przepraszam. To był błąd w moim kodzie. W SPROC nie było problemu. Sparametryzowałem funkcję i przekazałem niepoprawny parametr o wartości tabeli.