使用以下代码时,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不再崩溃。如果有人有解决此问题的替代解决方案,我将不胜感激。
答案 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
);