使用T-SQL OPENJSON和SELECT时VS崩溃*

时间:2019-05-22 21:01:12

标签: json tsql sql-server-data-tools

使用以下代码时,VS 2019崩溃时没有失败。尽管它最初可以正常运行,但可能在最近更新之前(或从VS 2017升级到VS 2019)

该错误消息暗示标识符太长,并且与特定文件有关。我临时通过通过Team Explorer(而不是启动窗口)访问我的项目来解决此问题。编辑文件后,它重新浮出水面。所以我逐行找到了罪魁祸首,下面的代码就是罪魁祸首。我不明白为什么会导致崩溃。


DECLARE @Characteristics nvarchar(4000) = (SELECT * FROM OPENJSON(@Details)
WITH ([Firstname] nvarchar(256) N'$.firstname',[Lastname] nvarchar(256) N'$.lastname') FOR JSON PATH, WITHOUT_ARRAY_WRAPPER);

这是合法命令,SQL接受包括部署在内的命令。出于我的目的,并且因为我控制WITH子句“ SELECT *”,这与我在SELECT子句中声明列的做法是可以接受的。

现在,我在SELECT子句中声明了每个期望的列,所以

VS不再崩溃。如果有人有解决此问题的替代解决方案,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您表现得不够好-至少对我来说-无法完全理解您的问题...

我得到的是

  • 您要使用SELECT *
  • 正在控制 WITH子句(我假设:您在应用程序中动态构建了该子句)

您没有显示实际的错误消息(请下次执行此操作),但是我知道,错误取决于

  • SELECT * FROM ...
  • SELECT Firstname, Lastname FROM ...

我无法复制您的问题,但是我想您的实际陈述中涉及的来源更多,而且*可能包含的内容比您告诉我们的还要多。

您是否尝试过在WITH之后使用表别名?

DECLARE @Details NVARCHAR(MAX)=N'[{"a":"a1", "b":"b1"},{"a":"a2","b":"b2"}]';

SELECT
(
    SELECT tbl.*              --<-- Using "tbl.*" instead of "*"
    FROM OPENJSON(@Details)
    WITH(a NVARCHAR(100)
        ,b NVARCHAR(100)) tbl --<-- table alias "tbl"
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
);