给出以下查询(这是一个更大的查询的一部分):
select
(select szamlatetel_id as SzamlatetelId,
kiert_eredm as KiertEredm
from vv_kiert K where K.vv_fej_id = 3
order by K.id
for xml raw('Kiertekeles'), TYPE)
此查询返回以下结果:
NULL
但是结果集应该为空。
我根本不希望看到此元素,因为该模式表明,如果我在XML中指定了此元素,则必须指定其他一些必填字段。因此,我的架构验证失败。
如何返回空结果集(非NULL)
上述查询包含在该查询中:
select
(select szamlatetel_id as SzamlatetelId,
kiert_eredm as KiertEredm
from vv_kiert K
where K.vv_fej_id = 3
order by K.id
for xml raw('Kiertekeles'), TYPE)
for xml raw('Kiertekelesek'), ELEMENTS, TYPE
更大的查询中包含了它本身。
我根本不想看到Kiertekelesek元素。
相反,我看到了:
<Kiertekelesek />
如何避免创建Kiertekelesek元素?
答案 0 :(得分:1)
您的内部查询已经满足您的要求。
select szamlatetel_id as SzamlatetelId,
kiert_eredm as KiertEredm
from vv_kiert K where K.vv_fej_id = 3
order by K.id
for xml raw('Kiertekeles')
具有给出的结果集
<Kiertekeles szamlatetel_id="12 />
没有结果集,它给出零行
这是一个完整的示例,其中包含临时案例和数据以演示解决方案。请自己尝试。
CREATE TABLE #vv_kiert(
id int NOT NULL,
szamlatetel_id int NOT NULL,
kiert_eredm varchar(10) NOT NULL,
vv_fej_id int NULL
)
GO
--example 1 with 1 (non-matching) row
INSERT INTO #vv_kiert VALUES (1, 1, 'example1', 0)
-- your original query, yields 1 row, 1 col: "NULL"
select
(select szamlatetel_id as SzamlatetelId,
kiert_eredm as KiertEredm
from #vv_kiert K where K.vv_fej_id = 3
order by K.id
for xml raw('Kiertekeles'), TYPE)
--example 2 with 2 rows (1 matching)
INSERT INTO #vv_kiert VALUES (2, 2, 'example2', 3)
-- your original query
select
(select szamlatetel_id as SzamlatetelId,
kiert_eredm as KiertEredm
from #vv_kiert K where K.vv_fej_id = 3
order by K.id
for xml raw('Kiertekeles'), TYPE)
--yields 1 row, 1 col: <Kiertekeles SzamlatetelId="2" KiertEredm="example2" />
--example 3 with an empty table
DELETE FROM #vv_kiert
-- your original query, yields 1 row 1 col: "NULL"
select
(select szamlatetel_id as SzamlatetelId,
kiert_eredm as KiertEredm
from #vv_kiert K where K.vv_fej_id = 3
order by K.id
for xml raw('Kiertekeles'), TYPE)
--My Solution, yields zero rows, like you requested
select szamlatetel_id as SzamlatetelId,
kiert_eredm as KiertEredm
from #vv_kiert K where K.vv_fej_id = 3
order by K.id
for xml raw('Kiertekeles')
-- done. clean up.
DROP TABLE #vv_kiert
如果您得到不同的结果,请修改您的问题以包括这样的数据示例。
答案 1 :(得分:0)
XML为NULL
时,XML将返回 no元素,但是内部查询将返回一个空元素,该元素不是NULL
,因此返回外部{{1 }}将会显示出来。那是设计。
您可以通过使用CTE来执行查询并通过在外部查询上放置SELECT
来强制将查询总数设为NULL
,从而使此技巧更上层楼。试试这个:
WHERE