我试图生成嵌套XML报告,该报告来自具有动态字段的表,并且我只想返回带有值的字段,而没有值的字段在MS SQL中用FOR XML PATH查询根本不会返回
SELECT
T1.[Col] AS '@id'
,T1.[Col] AS 'Event'
,(SELECT
(SELECT
Col AS '@name',
(SELECT COl FROM Table WHERE COl= Col) as '@description',
[Col] AS '@assessment'
FOR XML PATH('ininrow'), TYPE)
,(SELECT
Col AS '@name',
(SELECT COl FROM Table WHERE COl= Col) as '@description',
[Col] AS '@assessment'
FOR XML PATH('ininrow'), TYPE)
FOR XML PATH('InInRow'),TYPE)
FROM [dbo].[Table] T1
WHERE Col=12
FOR XML PATH('OutterRow'),TYPE
如果ininrow元素为null,我希望生成的XML不包含空元素
<OutterRow>
<ID>56789</ID>
<Event>Vetting</Event>
<InInRow>
<InRow>
<ininrow name="Bird" description="1: Black colar" assessment="BC2" />
<ininrow name="Dove" description="White" assessment="W1" />
</InRow>
</InInRow>
但是我正在制作类似这样的东西
<OutterRow>
<ID>56789</ID>
<Event>Vetting</Event>
<InInRow>
<InRow>
<ininrow name="Bird" description="1: Black colar" assessment="BC2" />
<ininrow />
</InRow>
</InInRow>
</OutterRow>
表1
Id
1000
1002
Table 2
colA ColB ColC ColD colID
Bird Black Colar Null Null 1000
Dove White Bird Black Colar 1002
答案 0 :(得分:0)
此出现就是您所追求的:
CREATE TABLE dbo.Table1 (ID int);
INSERT INTO dbo.Table1 (ID)
VALUES (1002),
(1000);
CREATE TABLE dbo.Table2 (ColA varchar(20),
ColB varchar(20),
ColC varchar(20),
ColD varchar(20),
ColID int);
INSERT INTO dbo.Table2 (ColA,
ColB,
ColC,
ColD,
ColID)
VALUES ('Bird', 'Black Colar', NULL, NULL, 1000),
('Dove', 'White', 'Bird', 'Black Colar', 1002);
GO
SELECT 56789 AS ID,
'Vetting' AS [Event],
(SELECT T2.ColA AS [@Name],
T2.ColB AS [@Description]
--No idea where W1/BC2 comes from, so omitted
FROM dbo.Table2 T2 --As Table1 has 1 column, I don't see why it's needed here
FOR XML PATH('ininrow'), ROOT('InRow'), TYPE) AS InInRow --You've already used InInRow, careful
FOR XML PATH('OutterRow')
GO
DROP TABLE dbo.Table1;
DROP TABLE dbo.Table2;