使用openjson创建存储过程时出错

xv8emn3q  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(377)

我的问题如下:我使用sql server 2017 express,我有一个类型为 json 以前格式化过,它在普通查询中正常运行。
但是当我创建存储过程时,我得到了一个错误,我真的不知道如何解决它。如果有人能帮我摆脱困境,我将不胜感激。
这是普通查询中的代码

  1. DECLARE @json NVARCHAR(MAX)
  2. SET @json =
  3. '
  4. {
  5. "varios":[{
  6. "name":"David",
  7. "cant":"291123",
  8. "number":"205893"
  9. },
  10. {
  11. "name":"pedro",
  12. "cant":"295523",
  13. "number":"206693"
  14. },
  15. {
  16. "name":"maria",
  17. "cant":"295523",
  18. "number":"206693"
  19. }
  20. ]
  21. }
  22. '
  23. SELECT *
  24. FROM OPENJSON (@json, '$.varios' )
  25. WITH (
  26. name varchar(200) '$.name' ,
  27. cant int '$.cant',
  28. number int '$.number'
  29. ) ;

这将返回以下结果:

  1. Name cant number
  2. ------------------------------
  3. David 291123 205893
  4. pedro 295523 206693
  5. maria 295523 206693

但当我尝试在这样的存储过程中执行相同的操作时:

  1. CREATE PROCEDURE sp_pro
  2. @json NVARCHAR(max)
  3. AS
  4. BEGIN
  5. SET @json =
  6. '
  7. {
  8. "varios":[{
  9. "name":"David",
  10. "cant":"291123",
  11. "number":"205893"
  12. },
  13. {
  14. "name":"pedro",
  15. "cant":"295523",
  16. "number":"206693"
  17. },
  18. {
  19. "name":"maria",
  20. "cant":"295523",
  21. "number":"206693"
  22. }
  23. ]
  24. }
  25. '
  26. SELECT *
  27. FROM OPENJSON(@json, '$.varios' )
  28. WITH (
  29. nombre varchar(50) '$.name',
  30. cantidad int '$.cant',
  31. numero int '$.number'
  32. );
  33. END

我无法解决以下错误:
消息102,级别15,状态1,程序sp\u prueba2,第29行[批处理开始行0]
sintaxis incorrecta cerca de'$.name'。
如果有人知道如何解决这个问题,或者我遗漏了什么步骤,我将不胜感激

dgiusagp

dgiusagp1#

openjson函数仅在兼容级别130或更高的情况下可用。如果您的数据库兼容级别低于130,那么SQLServer将无法找到并运行openjson函数。其他json函数在所有兼容级别都可用。
您可以在sys.databases视图或数据库属性中检查兼容性级别。可以使用以下命令更改数据库的兼容级别:

  1. ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 130

即使在新的azure sql数据库中,兼容级别120也可能是默认值。

相关问题