T-SQL 中批量插入的变量转换
在 T-SQL 中,BULK INSERT 语句允许从外部导入数据文件存入表中。但是,如果使用字符串变量作为数据源,则可能会出现错误。
问题:
以下 T-SQL 代码失败并出现错误(部分存储过程):
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 )
错误消息:
Incorrect syntax near the keyword 'with'.
原因:
在 BULK INSERT 语句中,FROM 子句需要文字字符串作为输入文件路径。使用变量时,必须将其转换为文字字符串。
解决方案:
要将变量 @CSVfile 转换为文字字符串,请使用以下动态 T -SQL 语法:
declare @q nvarchar(MAX); set @q= 'BULK INSERT [TStagingTable] FROM '+char(39)+@CSVfile+char(39)+' WITH ( FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 1 )' exec(@q)
此代码生成一个动态 SQL 语句,将 @CSVfile 转换为 FROM 子句中的文字字符串,解决问题并允许批量插入成功。
以上是如何在 T-SQL 中正确转换变量以进行批量插入?的详细内容。更多信息请关注PHP中文网其他相关文章!