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

执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:03