SQL Server中如何在DQE执行FOR JSON PATH并插入结果到临时表?
解决DQE环境中执行
FOR JSON PATH并插入临时表的问题 嘿,我来帮你搞定这个问题!你遇到的报错是因为SQL Server不允许直接通过INSERT EXEC执行包含FOR JSON PATH的语句并插入结果。不过有两种可靠的方法可以解决:
方法1:将JSON结果存入变量后插入临时表
这种方法通过sp_executesql带输出参数来获取JSON结果,还能避免SQL注入风险:
DECLARE @QUERY NVARCHAR(MAX) = 'SELECT @JSONOutput = (SELECT * FROM Student FOR JSON PATH)' DECLARE @JSONOutput NVARCHAR(MAX) DECLARE @TABLE TABLE(RESULT NVARCHAR(MAX)) -- 执行动态SQL并获取JSON结果 EXEC sp_executesql @QUERY, N'@JSONOutput NVARCHAR(MAX) OUTPUT', @JSONOutput OUTPUT -- 将结果插入临时表 INSERT INTO @TABLE(RESULT) VALUES(@JSONOutput)
方法2:修改动态SQL,将JSON包装为列返回
把FOR JSON PATH的结果作为子查询包装成一个普通列,这样INSERT EXEC就能正常处理了:
DECLARE @QUERY NVARCHAR(MAX) = 'SELECT (SELECT * FROM Student FOR JSON PATH) AS RESULT' DECLARE @TABLE TABLE(RESULT NVARCHAR(MAX)) INSERT @TABLE EXEC (@QUERY)
两种方法都能成功把FOR JSON PATH生成的JSON字符串插入到临时表的RESULT列中,你可以根据自己的场景选择更合适的一种。
内容的提问来源于stack exchange,提问作者samira mahdavi
相关产品推荐
相关产品推荐

