Variables de fundición para insertar a granel en tsql
en t-sql, la instrucción de inserción a granel permite importar los datos de un archivo externo en una tabla. Sin embargo, si se usa una variable de cadena como fuente de datos, puede ocurrir un error.
Problema:
El siguiente código T-SQL falla con un error (parte de un procedimiento almacenado):
declare @csvfile nvarchar (255); Set @csvfile = n't: \ x.csv '; Inserto masivo [DBO]. [TStagingTable] - De n't: \ x.csv '- esta línea funciona De @csvfile: esta línea falla CON ( Field terminator = ',', RowTerminator = '\ n', Firstrow = 2 )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 )Mensaje de error:
Incorrecta sintaxis cerca de la palabra clave 'con'.
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 )
motivo:
en la declaración de inserción masiva, la cláusula de la cláusula requiere una cadena literal como la ruta del archivo de entrada. Cuando se usa una variable, debe emitirse a una cadena literal.
SOLUCIÓN:
para lanzar la variable @csvfile a una cadena literal, use la siguiente sintax dinámica T-SQL:Declar @q nvarchar (max); set @q = 'Inserto masivo [TStagingTable] De 'char (39) @csvfile char (39)' CON ( Field terminator = '', '', RowTerminator = '' \ n '', Firstrow = 1 ) ' exec (@q)
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 )Este código genera una instrucción SQL dinámica que lanza @csvfile a una cadena literal dentro de la cláusula FOME, resolviendo el problema y permitiendo que el inserto masivo tenga éxito.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3