Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
如何在MS SQL Server中显示空XML标记_Sql_Sql Server_Xml_Tsql - Fatal编程技术网

如何在MS SQL Server中显示空XML标记

如何在MS SQL Server中显示空XML标记,sql,sql-server,xml,tsql,Sql,Sql Server,Xml,Tsql,我需要将数据导出为XML格式。为了简单起见,考虑到我有一个表雇员 FName、MName和LNEY列。为了将数据导出到XML中,我编写了以下查询 从Employee中为XML路径('Emp Details')、根目录('Details')选择FName、MName、LName 这将以正确的XML格式返回数据。但是,如果有任何值为NULL的行,它将跳过该列的XML标记。与以下示例一样,MName有一个NULL值,因此XML中也缺少MName的标记:- <Emp Details> &

我需要将数据导出为XML格式。为了简单起见,考虑到我有一个表<强>雇员 FName、MName和LNEY列。为了将数据导出到XML中,我编写了以下查询

从Employee中为XML路径('Emp Details')、根目录('Details')选择FName、MName、LName

这将以正确的XML格式返回数据。但是,如果有任何值为
NULL
的行,它将跳过该列的XML标记。与以下示例一样,MName有一个
NULL
值,因此XML中也缺少MName的标记:-

<Emp Details>
  <Details>
    <FName>Rohit</Fname>
    <LName>Kumar</LName>
  </Details>
</Emp Details>
但是,我希望它显示为

<MName />

是否可以以这种方式显示
NULL
值XML标记?
谢谢

如果要在结果中包含空的
MName
元素,只需在select语句中将NULL值转换为空字符串即可:

SELECT  FName, coalesce(MName, '') as MName, LName
from Employee
FOR XML PATH ('Emp Details'), ROOT ('Details');

coalesce
是ANSI将空值转换为某些内容的标准方法,SQL Server接受此方法以及SQL Server特定的
IsNull

如果希望在结果中包含空
MName
元素,只需在select语句中将空值转换为空字符串即可:

SELECT  FName, coalesce(MName, '') as MName, LName
from Employee
FOR XML PATH ('Emp Details'), ROOT ('Details');

coalesce
是ANSI将空值转换为某些内容的标准方法,SQL Server接受此方法以及SQL Server特定的
IsNull

正如我在注释中提到的,使用
IsNull
包装值以返回空字符串:

选择Fname,
名字,
ISNULL(MName“”)作为MName
FROM(value('Rohit','Kumar',NULL))V(FName,LName,MName)
对于XML路径('Details'),根('EmpDetails')--节点名称中不能有空格
这将返回以下XML:


罗希特
古玛

请注意,SQL Server不会使用较短的语法生成空白节点,它将显式打开和关闭标记。

正如我在注释中提到的,使用
ISNULL将值包装起来以返回空白字符串:

选择Fname,
名字,
ISNULL(MName“”)作为MName
FROM(value('Rohit','Kumar',NULL))V(FName,LName,MName)
对于XML路径('Details'),根('EmpDetails')--节点名称中不能有空格
这将返回以下XML:


罗希特
古玛

请注意,SQL Server不会使用较短的语法生成空白节点,它将显式打开和关闭标记。

使用
'
,这将强制显示节点。因此,
ISNULL(MName,”)
将强制显示节点,但为空。改用
'
将强制显示节点。因此,
ISNULL(MName,”)
将强制节点显示,但为空。谢谢,它现在可以工作了。但是我们能否将空标记限制为
。尽管我相信,XML认为两者是一样的。@Kartikeya我在回答中提到了这一点。谢谢,它现在可以工作了。但是我们能否将空标记限制为
。尽管我相信,XML认为两者是相同的。@Kartikeya我在回答中提到了这一点。