Попытка написать хранимую процедуру в 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 на протяжении всего проекта, и у меня не было никаких проблем.
Были распространены идеи о том, чтобы добавить это в качестве сценария после развертывания, что также не очень хорошо, поскольку это обходной путь, а не решение.