You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态SQL实现BULK INSERT时语法报错的原因排查

问题原因与解决方法

你的错误源于SQL语句拼接时缺少空格:BULK INSERT指定的表名MMBL_phase2.dbo.auto_test和FROM关键字被直接连在了一起,生成的无效SQL类似BULK INSERT MMBL_phase2.dbo.auto_testFROM 'D:\...',这就触发了语法错误。

修正后的代码

只需要在表名末尾或FROM开头添加一个空格即可:

DECLARE       @sql   VARCHAR(MAX);
DECLARE       @fileDate     VARCHAR(100);
DECLARE       @filePath     VARCHAR(100);

SET @fileDate = CAST(GETDATE() AS date);
SET @filePath = 'D:\BI-SCRIPTS\Nauman\test.csv';

SET @sql = 
        N'BULK INSERT MMBL_phase2.dbo.auto_test ' + 'FROM ''' + @filePath + '''' +
        ' WITH(
            FIRSTROW = 2,
            FIELDTERMINATOR = '','',
            ROWTERMINATOR = ''0x0a''
        );'

EXEC (@sql);

更安全的写法(避免SQL注入)

如果文件名是外部传入的参数,建议使用sp_executesql进行参数化查询,比直接字符串拼接更安全:

DECLARE @sql NVARCHAR(MAX);
DECLARE @filePath NVARCHAR(100) = 'D:\BI-SCRIPTS\Nauman\test.csv';

SET @sql = N'BULK INSERT MMBL_phase2.dbo.auto_test 
             FROM @FilePath
             WITH(
                 FIRSTROW = 2,
                 FIELDTERMINATOR = '','',
                 ROWTERMINATOR = ''0x0a''
             );';

EXEC sp_executesql @sql, N'@FilePath NVARCHAR(100)', @FilePath = @filePath;

内容的提问来源于stack exchange,提问作者Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:52:16