处理FOR XML中的NULL值

时间:2012-12-17 06:50:18

标签: sql sql-server sql-server-2008

            SELECT Col1
    FROM Table
    WHERE Col2 = 63895746
    ORDER BY Col
    FOR XML PATH,TYPE

我在结果中不需要NULLS。  我希望结果被类似的东西包裹起来      < Cols>< / Cols>即使col1为null也不是

在这个示例中,Table不包含col2 = 63895746的任何行,因此我将获得一个空结果集,因此type指令将使其为NULL并返回

7 个答案:

答案 0 :(得分:5)

怎么样

;with mytmp (f1) as (
  SELECT Col1
  FROM Table
  WHERE Col1 = 123456
  ORDER BY Col1
  FOR XML PATH('col'),root('cols'),TYPE
  )
select isnull(f1, '<cols></cols>')
from mytmp;

答案 1 :(得分:4)

您需要使用ELEMENTS XSINIL;

including-null-columns-empty-elements

您无法嵌套查询:

  

SELECT ISNULL(data.Col1,&#39;&lt; Cols&gt;&lt; / Cols&gt;&#39;)AS Col1
  FROM(
  选择Col1
      从表
      在哪里Col2 = 63895746
      Col的订单       FOR XML PATH,TYPE
  )数据

不在我的机器上,因此测试时有点难度。

答案 2 :(得分:3)

SELECT T.X
FROM
  (
  SELECT Col1
  FROM Table
  WHERE Col2 = 63895746
  ORDER BY Col
  FOR XML PATH, TYPE
  ) AS T
FOR XML PATH('Cols'), TYPE

答案 3 :(得分:0)

尝试:

SELECT 
    ISNULL(Col1, '< Cols >< /Cols>') AS Col1
FROM Table
WHERE Col2 = 63895746
ORDER BY Col
FOR XML PATH,TYPE

答案 4 :(得分:0)

如果Col1是一个字符串,那么您可以使用以下内容来实现此目的:

SELECT COALESCE(Col1,'')
FROM Table
WHERE Col2 = 63895746
ORDER BY Col
FOR XML PATH,TYPE

如果你有一个空值

,这将给你一个空标签

答案 5 :(得分:0)

SELECT
 (select col1 AS '*' FOR XML PATH(''), TYPE) AS cols
FROM Table
WHERE Col2 = 63895746
ORDER BY Col
FOR XML PATH,TYPE

答案 6 :(得分:0)

我认为,按照微软的说法,是使用

ELEMENTS XSINIL

作为选项,在xml路径之后

https://docs.microsoft.com/en-us/sql/relational-databases/xml/columns-that-contain-a-null-value-by-default?view=sql-server-2017