SSDT - ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ OPENJSON

Попытка написать хранимую процедуру в SSDT, как показано ниже:

            CREATE PROCEDURE Response.TransformHotel
                @RequestIDs Request.RequestIDs READONLY
            AS
            BEGIN 
                INSERT INTO response.Hotel
                SELECT EventID, 
                    JSON_VALUE(x.[value], '$.Id') AS HotelID,
                    JSON_VALUE(x.[value], '$.HasSpecialOffer') AS HasSpecialOffer,
                    JSON_VALUE(x.[value], '$.HasClosedUserGroupSpecialOffer') AS HasClosedUserGroupSpecialOffer,
                    JSON_VALUE(x.[value], '$.ReviewSummary.AverageScore') AS AvarageScore,
                    JSON_VALUE(x.[value], '$.PercentageScore') AS PercentageScore,
                    JSON_VALUE(x.[value], '$.NumberOfReviews') AS NumberOfReviews
                FROM Search.[Event] E
                INNER JOIN @RequestIDs R ON R.RequestID = E.EventID
                CROSS APPLY OPENJSON(E.MessageEvent, '$.Response.SearchResults') AS x
            END

Но это дает мне ошибку "SQL46010: неправильный синтаксис рядом с E."

Однако, если я напишу это в SSMS и выполню, у меня не будет проблем.

Я пробовал использовать другую хранимую процедуру, и кажется, что OPENJSON недоступен в SSDT.

            CREATE PROCEDURE Request.TestOpenJSON
            AS
                SELECT * FROM
                OPENJSON( (SELECT E.MessageEvent FROM search.Event E WHERE E.EventID = 1)) 

Visual Studio Professional 2015

Версия 14.0.25123.00 Обновление 2

.NET Framework версии 4.6.010555

Настройки проекта: целевая платформа: SQL Server 2016

Есть у кого-нибудь идеи? Лучше не проводить рефакторинг запроса для решения проблемы SSDT, если это возможно.

Я использовал JSON VALUE и JSON QUERY на протяжении всего проекта, и у меня не было никаких проблем.

Были распространены идеи о том, чтобы добавить это в качестве сценария после развертывания, что также не очень хорошо, поскольку это обходной путь, а не решение.


person Jay    schedule 27.06.2016    source источник
comment
Какая версия SSDT отображается загруженной при переходе в раздел «Справка» - «О программе»?   -  person Peter Schott    schedule 27.06.2016
comment
Версия 14.0.60525.0 s32.postimg.org/43tr68251/vs_version.png   -  person Jay    schedule 28.06.2016
comment
Определенно последняя версия на данный момент. Я бы открыл тикет Connect и / или написал бы об этом команде SSDT в Твиттере. И да, вы всегда можете выполнить сценарий после развертывания в качестве временного решения. Это не идеально, но, по крайней мере, поможет вам решить эту конкретную проблему.   -  person Peter Schott    schedule 28.06.2016
comment
Такая же ошибка возникла и в моем проекте. Похоже, они еще не добавили надлежащую поддержку JSON в SSDT.   -  person Sergey Rybalkin    schedule 28.06.2016
comment
Проголосуйте за соответствующую проблему Connect, чтобы мы могли быстрее получить исправление - connect.microsoft.com/SQLServer/feedback/details/2820804/   -  person Sergey Rybalkin    schedule 28.06.2016
comment
Связался с Microsoft. Это известная проблема парсера, используемого проектами баз данных. К сожалению, мы не исправили это в выпуске SSDT от 30 июня. У нас должно быть исправление для выпуска от 30 июля.   -  person Jay    schedule 30.06.2016


Ответы (1)


Может быть, слишком поздно отвечать, но у меня была та же проблема с инструкцией openjson, когда я нашел этот пост, поэтому вот мои результаты. Если вы восстанавливаете базу данных из Sql Server 2012 (например, без поддержки openjson) в Sql Server 2016, уровень совместимости остается в Sql Server 2012. Вам необходимо обновить базу данных (не ядро) до уровня 130 или выше:

ALTER DATABASE database_name   
SET COMPATIBILITY_LEVEL = 130

https://msdn.microsoft.com/es-es/library/bb510680.aspx

person cpsaez    schedule 14.03.2017