Variablen für Masseneinfügung in T-SQL umwandeln
In T-SQL ermöglicht die BULK INSERT-Anweisung den Import von Daten von extern Datei in eine Tabelle. Wenn jedoch eine Zeichenfolgenvariable als Datenquelle verwendet wird, kann ein Fehler auftreten.
Problem:
Der folgende T-SQL-Code schlägt mit einem Fehler fehl (Teil von eine gespeicherte Prozedur):
DECLARE @CSVfile nvarchar(255); SET @CSVfile = N'T:\x.csv'; BULK INSERT [dbo].[TStagingTable] -- FROM N'T:\x.csv' -- This line works FROM @CSVfile -- This line fails WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', FIRSTROW = 2 )
Fehler Nachricht:
Incorrect syntax near the keyword 'with'.
Grund:
In der BULK INSERT-Anweisung erfordert die FROM-Klausel eine Literalzeichenfolge als Eingabedateipfad. Wenn Sie eine Variable verwenden, muss diese in eine Literalzeichenfolge umgewandelt werden.
Lösung:
Um die Variable @CSVfile in eine Literalzeichenfolge umzuwandeln, verwenden Sie das folgende dynamische T -SQL-Syntax:
declare @q nvarchar(MAX); set @q= 'BULK INSERT [TStagingTable] FROM '+char(39)+@CSVfile+char(39)+' WITH ( FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 1 )' exec(@q)
Dieser Code generiert eine dynamische SQL-Anweisung, die @CSVfile in eine Literalzeichenfolge innerhalb der FROM-Klausel umwandelt. Beheben des Problems und Ermöglichen der erfolgreichen Masseneinfügung.
Das obige ist der detaillierte Inhalt vonWie werden Variablen für Masseneinfügungen in T-SQL korrekt umgewandelt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!