Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 OPENJSON проблема с динамическим SQL  [new]
lex452
Member

Откуда:
Сообщений: 568
Есть задача создать хранимую процедуру на нескольких серверах:

CREATE PROCEDURE dbo.uspParseJson
    @json nvarchar(max)  
AS   

    SET NOCOUNT ON;  
    SELECT *
   FROM OPENJSON(@json, N'$.Orders')
   WITH (
    Number      VARCHAR(200)    '$.Order.Number',
    Date        DATETIME        '$.Order.Date'
)
  


Хотел сделать это через Динамический SQL по очереди выполняя запрос на каждой БД:
EXEC('CREATE PROCEDURE dbo.uspParseJson
    @json nvarchar(max)  
AS   

    SET NOCOUNT ON;  
    SELECT *
   FROM OPENJSON(@json, N''$.Orders'')
   WITH (
    Number      VARCHAR(200)    ''$.Order.Number'',
    Date        DATETIME        ''$.Order.Date''
)')


Но сервер выдает ошибку
Некорректный синтаксис возле '$.Order.Number'

Кто знает как можно обойти этот Баг (если он таковым является)?
8 фев 18, 20:06    [21178050]     Ответить | Цитировать Сообщить модератору
 Re: OPENJSON проблема с динамическим SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
lex452
Кто знает как можно обойти этот Баг (если он таковым является)?
Ваш Баг нужно обойти его исправлением.

Вы создаёте динамическим запросом хранимую процедуру, а нужно внутри процедуры сделать динамический запрос.
8 фев 18, 22:45    [21178408]     Ответить | Цитировать Сообщить модератору
 Re: OPENJSON проблема с динамическим SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
lex452
Но сервер выдает ошибку
Некорректный синтаксис возле '$.Order.Number'
А, подождите, вам и нужно создать процедуру?
Извините, неправильно прочитал вопрос.
Всё правильно, это должно работать.

Очевидно, версия сервера или уровень совместимости баз неправильные.
8 фев 18, 22:48    [21178416]     Ответить | Цитировать Сообщить модератору
 Re: OPENJSON проблема с динамическим SQL  [new]
lex452
Member

Откуда:
Сообщений: 568
alexeyvg,

С вашей стороны очевидно, но по факту нет, сервер 2017, базы такие же. Если создавать процедуру напрямую, без динамического sql все прекрасно создается. Проблема проявляется толькь когда оборачиваешь скрипт в exec(‘’)
9 фев 18, 07:19    [21178716]     Ответить | Цитировать Сообщить модератору
 Re: OPENJSON проблема с динамическим SQL  [new]
Барсук-копатель
Member [заблокирован]

Откуда: Московский парк
Сообщений: 94884
lex452
alexeyvg,

С вашей стороны очевидно, но по факту нет, сервер 2017, базы такие же. Если создавать процедуру напрямую, без динамического sql все прекрасно создается. Проблема проявляется толькь когда оборачиваешь скрипт в exec(‘’)
только что проверил
все создается
проверяйте версии серверов и настройки баз
9 фев 18, 09:49    [21178884]     Ответить | Цитировать Сообщить модератору
 Re: OPENJSON проблема с динамическим SQL  [new]
ага
Guest
выполните запрос и поглядите результат
SELECT name, compatibility_level FROM sys.databases

compatibility_level должен быть >=130
9 фев 18, 10:10    [21178935]     Ответить | Цитировать Сообщить модератору
 Re: OPENJSON проблема с динамическим SQL  [new]
lex452
Member

Откуда:
Сообщений: 568
alexeyvg,

Все были правы, сервер обновил, а базы не поменял. Спасибо за помощь
9 фев 18, 12:46    [21179580]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить