首页 >数据库 >mysql教程 >如何在 T-SQL 中正确转换变量以进行批量插入?

如何在 T-SQL 中正确转换变量以进行批量插入?

Linda Hamilton
Linda Hamilton原创
2024-12-21 04:36:10225浏览

How to Correctly Cast Variables for Bulk Inserts in T-SQL?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn