Maison >base de données >tutoriel mysql >Comment convertir correctement les variables pour les insertions en masse dans T-SQL ?
Casting de variables pour l'insertion en masse dans T-SQL
Dans T-SQL, l'instruction BULK INSERT permet d'importer des données à partir d'un déposer dans un tableau. Cependant, si vous utilisez une variable chaîne comme source de données, une erreur peut se produire.
Problème :
Le code T-SQL suivant échoue avec une erreur (une partie de une procédure stockée):
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 )
Erreur message :
Incorrect syntax near the keyword 'with'.
Raison :
Dans l'instruction BULK INSERT, la clause FROM nécessite une chaîne littérale comme chemin d'accès au fichier d'entrée. Lorsque vous utilisez une variable, elle doit être convertie en chaîne littérale.
Solution :
Pour convertir la variable @CSVfile en chaîne littérale, utilisez le T dynamique suivant -Syntaxe SQL :
declare @q nvarchar(MAX); set @q= 'BULK INSERT [TStagingTable] FROM '+char(39)+@CSVfile+char(39)+' WITH ( FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 1 )' exec(@q)
Ce code génère une instruction SQL dynamique qui convertit @CSVfile en une chaîne littérale dans le FROM clause, résolvant le problème et permettant à l'insertion groupée de réussir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!