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

OPENJSON()在SQLCMD返回0行,SSMS却返回大量行的问题求助

OPENJSON()在SSMS中正常运行但SQLCMD执行返回0行的问题

我有一组使用OPENJSON()的SQL查询,在SQL Server Management Studio(SSMS)中执行能正常返回结果,但通过命令提示符用sqlcmd执行时,查询返回0行。

示例SQL语句

INSERT INTO [common].[dbo].[distrcd] (schyr, distrcd, beginschyr, endschyr, cooprcdt, coopdistname, adminname, adminphone, adminemail, fax, address1, address2, city, [state], zip)
    SELECT * FROM OPENJSON(@JsonDefinition)
    WITH (schyr VARCHAR(9) '$.schoolYear',
    distrcd VARCHAR(5) '$.distributionCode',
    beginschyr VARCHAR(9) '$.beginSchoolYear',
    endschyr VARCHAR(9) '$.endSchoolYear',
    cooprcdt VARCHAR(11) '$.coopRCDT',
    coopdistname VARCHAR(33) '$.coopName',
    adminname VARCHAR(30) '$.adminName',
    adminphone VARCHAR(10) '$.adminPhone',
    adminemail VARCHAR(100) '$.email',
    fax VARCHAR(10) '$.fax',
    address1 VARCHAR(50) '$.address1',
    address2 VARCHAR(50) '$.address2',
    city VARCHAR(33) '$.city',
    [state] VARCHAR(2) '$.state',
    zip VARCHAR(5) '$.zipCode')
    WHERE ISJSON(@JsonDefinition) > 0;

这条语句在SSMS中执行时能成功插入181行!

SQLCMD执行命令

sqlcmd -S server -U username -P password -i \\server\share\ApiTest.sql

执行后返回结果为(0 rows affected)。

我已经确认@JsonDefinition变量在SSMS和SQLCMD环境中都已正确填充,看起来OPENJSON()执行异常但没有抛出错误,以下是可能的原因及解决方向:

  • QUOTED_IDENTIFIER设置差异:SSMS默认启用SET QUOTED_IDENTIFIER ON,而SQLCMD默认可能为OFF。OPENJSON()要求必须启用该设置才能正常解析JSON路径中的引号。解决方法是在脚本开头添加SET QUOTED_IDENTIFIER ON;强制开启。
  • JSON字符串转义问题:如果@JsonDefinition是在脚本中直接赋值,SQLCMD对字符串转义的处理逻辑和SSMS不同(比如双引号的转义规则),可能导致实际传入的JSON格式无效,ISJSON()返回0,从而没有数据插入。可以在脚本中添加PRINT @JsonDefinition,分别在两种环境中输出对比实际内容,检查转义是否正确。
  • 数据库上下文或权限差异:SQLCMD使用的登录账号可能默认数据库上下文与SSMS不同,导致对[common].[dbo].[distrcd]表的访问逻辑有差异。可以在脚本开头添加USE common;明确指定数据库上下文,同时确认账号对目标表的读写权限一致。
  • SQL Server版本兼容性:OPENJSON()从SQL Server 2016开始支持,需确认SQLCMD和SSMS连接的是同一个SQL Server实例,且版本一致,避免因版本差异导致功能不兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:11:29