Ошибка создания хранимой процедуры с помощью openjson - PullRequest
0 голосов
/ 27 мая 2020

Моя проблема заключается в следующем: я использую SQL Server 2017 Express, у меня есть переменная типа json, ранее отформатированная, она работает нормально в обычном запросе.

Но когда я создаю хранимой процедуры, я получаю сообщение об ошибке и действительно не знаю, как ее решить. Я был бы признателен, если бы мне кто-нибудь помог мне в этой проблеме.

Это код в обычном запросе

DECLARE @json NVARCHAR(MAX)
SET @json =   
  '
  {
    "varios":[{
    "name":"David",
    "cant":"291123",
     "number":"205893"
        },
        {
    "name":"pedro",
    "cant":"295523",
     "number":"206693"
        },
            {
    "name":"maria",
    "cant":"295523",
     "number":"206693"
        }
    ]
    }
' 
SELECT * 
FROM OPENJSON (@json, '$.varios' )  
     WITH (   
              name varchar(200) '$.name' ,  
              cant    int     '$.cant',  
              number int '$.number' 
          ) ;

Это возвращает следующий результат:

Name         cant       number
------------------------------
David       291123      205893
pedro       295523      206693
maria       295523      206693

Но когда я пытаюсь сделать то же самое в такой хранимой процедуре:

CREATE PROCEDURE sp_pro
    @json NVARCHAR(max)
AS
BEGIN
    SET @json =   
  '
  {
    "varios":[{
    "name":"David",
    "cant":"291123",
     "number":"205893"
        },
        {
    "name":"pedro",
    "cant":"295523",
     "number":"206693"
        },
            {
    "name":"maria",
    "cant":"295523",
     "number":"206693"
        }
    ]
    }
' 
    SELECT * 
    FROM OPENJSON(@json, '$.varios' )  
    WITH (
            nombre varchar(50) '$.name',  
            cantidad int '$.cant',  
            numero int '$.number' 
         );
END

, я получаю следующую ошибку, которую не смог решить:

Msg 102, Уровень 15, состояние 1, процедура sp_prueba2, строка 29 [Batch Start Line 0]
Sintaxis invalida cerca de '$ .name'.

Я признателен, если кто-то знает, как это можно решить, или какой шаг я пропустил

1 Ответ

0 голосов
/ 28 мая 2020

Функция OPEN JSON доступна только при уровне совместимости 130 или выше. Если уровень совместимости вашей базы данных ниже 130, SQL Сервер не может найти и запустить функцию OPEN JSON. Другие функции JSON доступны на всех уровнях совместимости.

Уровень совместимости можно проверить в представлении sys.databases или в свойствах базы данных. Вы можете изменить уровень совместимости базы данных с помощью следующей команды:

ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 130

Уровень совместимости 120 может быть значением по умолчанию даже в новой Azure SQL базе данных.

...