使用FOR JSON PATH/AUTO时遇'Incorrect syntax near JSON'错误求助
解决FOR JSON PATH/AUTO报错"Incorrect syntax near JSON"的问题
嘿,这个问题我之前帮同事排查过,大概率是SQL Server版本不兼容或者数据库兼容性级别设置过低导致的,咱们一步步来解决:
1. 检查你的SQL Server版本是否支持FOR JSON
FOR JSON 是SQL Server 2016(版本号13.x)及以后版本才引入的功能,如果你的版本低于2016,自然会报语法错误。
你可以运行这条查询查看当前版本:
SELECT @@VERSION;
如果返回的版本号低于13.x(比如12.x对应SQL Server 2014),那你需要升级到SQL Server 2016或更高版本才能使用FOR JSON语法。
2. 检查数据库兼容性级别
即使你的SQL Server版本是2016+,如果目标数据库的兼容性级别设置为低于130,也会导致FOR JSON无法被识别。
步骤1:查看当前数据库的兼容性级别
运行这条查询(替换YourDatabaseName为你的数据库名):
SELECT name, compatibility_level FROM sys.databases WHERE name = 'YourDatabaseName';
步骤2:升级兼容性级别到130或更高
如果兼容性级别低于130,执行这条语句升级:
ALTER DATABASE YourDatabaseName SET COMPATIBILITY_LEVEL = 130;
(注:130对应SQL Server 2016,140对应2017,以此类推,根据你的SQL Server版本选择合适的级别)
3. 验证你的SQL代码本身
其实你的代码写法是完全正确的:
SELECT TOP 5 recid As Id, FirstName, LastName, status As 'Info.status', state As 'Info.state' FROM dbo.Consumers FOR JSON PATH
当环境满足要求后,这条查询应该会返回嵌套结构的JSON结果,比如:
[{"Id":1,"FirstName":"xxx","LastName":"xxx","Info":{"status":"xxx","state":"xxx"}},...]
如果还是有问题,可以先运行一个极简测试语句验证环境:
SELECT 'Alice' AS FirstName, 'Smith' AS LastName FOR JSON PATH;
如果这个能正常返回JSON,说明环境没问题,再回到你的原查询排查其他细节(比如表名、字段名是否正确)。
内容的提问来源于stack exchange,提问作者Jiah
相关产品推荐
相关产品推荐

