这是我需要在SQL服务器生成的XML中显示的输出:
<Fo>
<Number>1</Number>
<CreatedDate>02/06/2016</CreatedDate>
<CreatedBy>1</CreatedBy>
<ModifiedDate>02/06/2016</ModifiedDate>
<ModifiedBy>1</ModifiedBy>,
<Pro>
<Number>1</Number>
<LotNumber>Lot 1288</LotNumber>
</Pro>
<Pro>
<Number>2</Number>
<LotNumber>Lot 1299</LotNumber>
</Pro>
<Pro>
<Number>3</Number>
<LotNumber>Lot 1211</LotNumber>
</Pro>
</Fo>
这是我尝试的代码,但仍然无法显示结果。
SELECT *
(SELECT * FROM TAB_B FOR XML PATH(''))
FROM TBL_A
FOR XML PATH('')
大家好,我可以获取示例脚本来显示结果吗?
<Pro>
方是来自DB的循环结果,这意味着1个家庭有很多孩子。
谢谢。
答案 0 :(得分:1)
&#34; ModifiedBy&#34;之后的逗号;似乎是不正确的......
避免使用特定于文化的日期格式!:您的<CreatedDate>02/06/2016</CreatedDate>
可能会被视为6月2日或2月6日,甚至可能会引发异常。在XML中使用ISO8601
和in SQL you should prefer ODBC, ISO or Universal-Unseparated
这看起来像1:n相关的结构。但是没有暗示关系(共同密钥)。
如果这是1:n相关的结构,我假设可能有几个&#34; Fo&#34;具有不同Pro项的条目。在这种情况下,最好将所有&#34; Pro&#34;具有自己的&#34; Pros&#34; -element标记的元素将它们与其余元素分开:
在我的测试场景中,我添加了一个专栏&#34; ANumber&#34;到&#34; tblB&#34;作为外键并添加两行到&#34; Fo&#34;在&#34; tblB&#34;。
中包含子行此外,我添加了一个你不需要的通用root,如果只有一个&#34; fo&#34;元素如你的例子。
如果你想为你的&#34; Pro&#34;添加封装元素。元素,只需将内部SELECT
更改为FOR XML PATH('Pro'),ROOT('Pros'),TYPE
:
DECLARE @tblA TABLE(Number INT,CreatedDate DATETIME,CreatedBy INT,ModifiedDate DATETIME,ModifiedBy INT);
INSERT INTO @tblA VALUES
(1,{d'2016-06-02'},1,{d'2016-06-02'},1)
,(2,{d'2016-07-02'},1,{d'2016-07-02'},1);
DECLARE @tblB TABLE(Number INT, ANumber INT,LotNumber VARCHAR(100));
INSERT INTO @tblB VALUES
(1,1,'Lot 1288')
,(2,1,'Lot 1299')
,(3,1,'Lot 1211')
,(1,2,'Lot 222a')
,(2,2,'Lot 222b');
SELECT tblA.*
,(
SELECT tblB.Number
,tblB.LotNumber
FROM @tblB AS tblB
WHERE tblB.ANumber=tblA.Number
FOR XML PATH('Pro'),TYPE
)
FROM @tblA AS tblA
FOR XML PATH('Fo'),ROOT('root')
结果
<root>
<Fo>
<Number>1</Number>
<CreatedDate>2016-06-02T00:00:00</CreatedDate>
<CreatedBy>1</CreatedBy>
<ModifiedDate>2016-06-02T00:00:00</ModifiedDate>
<ModifiedBy>1</ModifiedBy>
<Pro>
<Number>1</Number>
<LotNumber>Lot 1288</LotNumber>
</Pro>
<Pro>
<Number>2</Number>
<LotNumber>Lot 1299</LotNumber>
</Pro>
<Pro>
<Number>3</Number>
<LotNumber>Lot 1211</LotNumber>
</Pro>
</Fo>
<Fo>
<Number>2</Number>
<CreatedDate>2016-07-02T00:00:00</CreatedDate>
<CreatedBy>1</CreatedBy>
<ModifiedDate>2016-07-02T00:00:00</ModifiedDate>
<ModifiedBy>1</ModifiedBy>
<Pro>
<Number>1</Number>
<LotNumber>Lot 222a</LotNumber>
</Pro>
<Pro>
<Number>2</Number>
<LotNumber>Lot 222b</LotNumber>
</Pro>
</Fo>
</root>