Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Synapse如何交叉应用JSON路径_Json_Sql Server_Tsql_Azure Synapse - Fatal编程技术网

Azure Synapse如何交叉应用JSON路径

Azure Synapse如何交叉应用JSON路径,json,sql-server,tsql,azure-synapse,Json,Sql Server,Tsql,Azure Synapse,我希望根据另一个表中的几个字段动态地提取数据行,并在将其作为单行加入时将其汇总为JSON 这里有一个小例子来说明 [Test].[dbo].[tableA] 可乐 可乐 1. 我 2. 二, 3. 三, 我无法在您的环境中测试,因此这可能不起作用。。。 您可以尝试以下方法之一: DECLARE @tblA TABLE(Col1 INT, Col2 VARCHAR(10)); INSERT INTO @tblA(Col1,Col2) VALUES (1,'i') ,(2,'ii') ,(3,'i

我希望根据另一个表中的几个字段动态地提取数据行,并在将其作为单行加入时将其汇总为JSON

这里有一个小例子来说明

[Test].[dbo].[tableA]

可乐 可乐 1. 我 2. 二, 3. 三,
我无法在您的环境中测试,因此这可能不起作用。。。 您可以尝试以下方法之一:

DECLARE @tblA TABLE(Col1 INT, Col2 VARCHAR(10));
INSERT INTO @tblA(Col1,Col2) VALUES
 (1,'i')
,(2,'ii')
,(3,'iii');

DECLARE @tblB TABLE(A_id INT,B_Col1 VARCHAR(10),B_Col2 VARCHAR(10));
INSERT INTO @tblB(A_id,B_Col1,B_Col2) VALUES
 (1,'b11','b12')
,(1,'b111','b112')
,(2,'b21','b22')
,(2,'b22','b222');
--将列名称传递到CA名称后面(避免嵌套选择)

--使用标量子选择完全避免CA

  SELECT A.Col1
        ,A.Col2
        ,(
          SELECT * FROM @tblB as B
          WHERE B.A_id = A.Col1
          FOR JSON PATH
         ) AS B_JSON
  FROM @tblA as A;

我无法在您的环境中测试,因此这可能不起作用。。。 您可以尝试以下方法之一:

DECLARE @tblA TABLE(Col1 INT, Col2 VARCHAR(10));
INSERT INTO @tblA(Col1,Col2) VALUES
 (1,'i')
,(2,'ii')
,(3,'iii');

DECLARE @tblB TABLE(A_id INT,B_Col1 VARCHAR(10),B_Col2 VARCHAR(10));
INSERT INTO @tblB(A_id,B_Col1,B_Col2) VALUES
 (1,'b11','b12')
,(1,'b111','b112')
,(2,'b21','b22')
,(2,'b22','b222');
--将列名称传递到CA名称后面(避免嵌套选择)

--使用标量子选择完全避免CA

  SELECT A.Col1
        ,A.Col2
        ,(
          SELECT * FROM @tblB as B
          WHERE B.A_id = A.Col1
          FOR JSON PATH
         ) AS B_JSON
  FROM @tblA as A;

如果您自己尝试内部查询,会发生什么情况?为了澄清,像上面示例中的内部most select这样的语句生成JSON works@Charlieface,但将其包装为另一个select以给它一个列名失败,并引用了错误above@charlieface这个环节一定是过时了,,正如我上面所说,JSON结果在azure synapse无服务器SQL池中创建得很好,只有外部select失败。如果您尝试内部查询来澄清,会发生什么情况,比如上面示例中的最内部select语句来生成JSON works@Charlieface,但若要将其包装为另一个SELECT,并为其指定列名,则会失败,并引用错误above@charlieface该链接一定是过时了,正如我上面所说的,JSON结果在azure synapse无服务器SQL池中创建得很好,只有外部选择失败。谢谢@Shnugo,非常感谢您的尝试,非常好的建议。不幸的是,这两种方法都会导致Synapse SQL on-demand中出现相同的错误(“查询引用的对象在分布式处理模式下不受支持”)。我很想了解原因-我想这需要到产品团队去了解。谢谢@Shnugo,非常感谢您的尝试,非常好的建议。不幸的是,这两种方法都会导致Synapse SQL on-demand中出现相同的错误(“查询引用的对象在分布式处理模式下不受支持”)。我很想了解原因——我想这需要到产品团队去了解。