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

我在结果中不需要 NULLS。我希望结果被 < Cols >< /Cols > 之类的东西包裹,即使 col1 是否为空

在这个例子中 Table 不包含 col2 = 63895746 的任何行,所以我会得到一个空的结果集,所以 type 指令会将它设为 NULL 并返回它

4

6 回答 6

5

你需要使用ELEMENTS XSINIL;

包括空列空元素

如果您无法嵌套查询:

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

不在我的机器上,所以测试起来有点困难。

于 2012-12-17T07:08:34.080 回答
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;
于 2012-12-17T07:40:30.413 回答
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
于 2012-12-17T07:32:57.517 回答
1

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

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

如果你有一个空值,那会给你一个空标签

于 2012-12-17T07:14:01.317 回答
1

我认为,根据微软,是使用

ELEMENTS XSINIL

作为选项,在用于 xml 路径之后

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

于 2019-01-28T07:42:47.333 回答
0

尝试:

SELECT 
    ISNULL(Col1, '< Cols >< /Cols>') AS Col1
FROM Table
WHERE Col2 = 63895746
ORDER BY Col
FOR XML PATH,TYPE
于 2012-12-17T06:53:56.120 回答