【发布时间】:2016-06-27 11:55:48
【问题描述】:
尝试在 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 专业版 2015
版本 14.0.25123.00 更新 2
.NET 框架版本 4.6.010555
项目设置: 目标平台:SQL Server 2016
有人有什么想法吗?如果可能,不要重构查询来解决 SSDT 问题。
我在整个项目中使用了 JSON VALUE 和 JSON QUERY,没有遇到任何问题。
传递的想法是将其添加为部署后脚本,这也不是很好,因为它是一种变通方法而不是解决方案。
【问题讨论】:
-
当您转到帮助 - 关于时,您显示哪个版本的 SSDT 已加载?
-
版本 14.0.60525.0 s32.postimg.org/43tr68251/vs_version.png
-
绝对是目前的最新版本。我会在 Twitter 上打开 Connect 票证和/或 ping SSDT 团队。是的,您始终可以执行部署后脚本作为解决方法。这并不理想,但至少可以帮助您解决这个特殊问题。
-
我的项目中也出现了同样的错误。似乎他们还没有为 SSDT 添加对 JSON 的适当支持。
-
请对相应的 Connect 问题进行投票,以便我们更快地得到修复 - connect.microsoft.com/SQLServer/feedback/details/2820804/…
标签: json sql-server-data-tools cross-apply