tsql在没有数据时填充xml标记

时间:2014-02-03 19:37:36

标签: sql-server xml tsql

如果没有为该行检索数据,是否有办法生成xml标记?

例如:

Select
   firstname,
   middlename,
   lastname
from 
   Names
for xml path('name'), type)

输出:

<name>
   <firstname>John</firstname>
   <middlename>Jim</middlename>
   <lastname>Smith</lastname>
</name>

但如果没有中间名,它会跳过xml中的那一行。

<name>
   <firstname>Jane</firstname>
   <lastname>Smith</lastname>
</name>

如果没有中间名数据,我正在寻找此输出:

<name>
   <firstname>Jane</firstname>
   <middlename />
   <lastname>Smith</lastname>
</name>

这可以实现吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

SELECT 
    FirstName, 
    MiddleName = ISNULL(MiddleName, ''),
    LastName
FROM    
    @input
FOR XML PATH('name')

给你

<name>
  <FirstName>John</FirstName>
  <MiddleName></MiddleName>
  <LastName>Smith</LastName>
</name>

答案 1 :(得分:0)

您可以使用XSNIL这样执行此操作:

DECLARE @DataSource TABLE
(
     [FirstName] NVARCHAR(32)
    ,[MiddleName] NVARCHAR(32)
    ,[LastName] NVARCHAR(32)
)

INSERT INTO @DataSource ([FirstName], [MiddleName], [LastName])
VALUES ('John','Smith','Tomas')
      ,('John',NULL,'Tomas')
      ,('John',NULL,NULL)
      ,(NULL,'Smith','Tomas')

SELECT [FirstName]
      ,[MiddleName]
      ,[LastName]
FROM @DataSource
FOR XML PATH('NAME'), ELEMENTS XSINIL, TYPE