/ / Wstawianie zbiorcze z tabelą Wartościowany parametr nie działa - sql, sql-server, baza danych, sql-server-2008, tsql

Bulk Insert z Table Valued Parametr nie działa - sql, sql-server, database, sql-server-2008, tsql

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 № 1

Wystą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.