执行OPENROWSET命令出现语法错误该如何修复
问题修复方案
错误原因
- 动态SQL单引号转义错误:在被单引号包裹的动态SQL字符串中,要表示一个字面量单引号需要写两个单引号,你代码中替换换行符的空字符串仅写了
'',会被识别为动态字符串的结束符,直接触发引号未闭合、路径附近语法错误的报错 - 变量赋值逻辑错误:直接调用
EXEC()执行动态SQL无法将计算结果赋值给外部的@data_count变量,需要改用sp_executesql传递输出参数 - 语法结构不完整:统计行数的子查询左侧写了左括号,没有对应的右括号闭合
修复后代码
DECLARE @fullPath NVARCHAR(200) = 'D:\Hosting\Project\Content\Order\ImportTest.txt' DECLARE @command NVARCHAR(MAX) DECLARE @data_count INT -- 动态SQL拼接时空字符串需要写4个单引号,对应最终执行语句里的两个单引号(表示空值) SET @command = N'SELECT @data_count = ( SELECT LEN(BulkColumn) - LEN(REPLACE(BulkColumn, CHAR(10), '''')) + 1 FROM OPENROWSET(BULK ''' + @fullPath + ''', SINGLE_CLOB) AS ROW_SET )' -- 通过sp_executesql传递输出参数拿到统计结果 EXEC sp_executesql @command, N'@data_count INT OUTPUT', @data_count = @data_count OUTPUT -- 输出统计结果可根据需要调整 SELECT @data_count AS 文件行数
额外注意事项
- 请确保SQL Server服务的运行账户有目标文件路径的读取权限,否则会触发权限类报错
- 如果你的文件是Windows系统默认的
\r\n换行格式,统计结果如果包含不需要的末尾空行,可以自行调整计算逻辑减去多余计数
内容的提问来源于stack exchange,提问作者Wilson Loo
相关产品推荐
相关产品推荐

