无法在FOR XML部分

时间:2016-10-14 16:39:54

标签: xml sql-server-2008 for-xml-path

我已经在此帮助下生成了一个FOR XML Link。 在解决方案中有一个条件

SELECT   
                    'String' as [Cell/Data/@ss:Type],
                    [Col1] as [Cell/Data],
                    '',
                    'String' as [Cell/Data/@ss:Type],
                    [Col2] as [Cell/Data],
                    '',

我想为这部分添加一个条件 说

SELECT      
                CASE 
                    WHEN COL1 LIKE '%SUP%'
                    THEN
                    'String' as [Cell/ss:Data/@ss:Type]
                    ELSE 
                    'String' as [Cell/Data/@ss:Type]
                    END ,
                [Col1] as [Cell/Data],
                '',

但是我遇到了问题。 请帮助我。

上面的基本代码显示了语法错误。  如果我添加

SELECT      
                    CASE 
                        WHEN COL1 LIKE '%SUP%'
                        THEN
                        (SELECT 'String' as [Cell/ss:Data/@ss:Type])
                        ELSE 
                        (SELECT 'String' as [Cell/Data/@ss:Type])
                        END ,
                    [Col1] as [Cell/Data],
                    '','

然后生成的XML不正确

1 个答案:

答案 0 :(得分:1)

如果我理解您所说的内容,那么如果Col1包含字符串" SUP",您希望在最终的XML中使用此标记:

<ss:Data ss:Type="String">SomethingContainingSup</ss:Data>

否则,你想要这个表达式:

<Data ss:Type="String">SomethingElse</Data>

我认为你可以通过这个SQL片段得到它:

SELECT CASE WHEN COL1 LIKE '%SUP%' THEN 'String' END  as [Cell/ss:Data/@ss:Type],
       CASE WHEN Col1 Like '%SUP%' THEN Col1 END as [Cell/ss:Data], 
       CASE WHEN COL1 NOT LIKE '%SUP%' THEN 'String' END  as [Cell/Data/@ss:Type],                    
       CASE WHEN Col1 NOT Like '%SUP%' THEN Col1  END as [Cell/Data],
       ''

为什么你的工作不起作用:你不能使列(或XML元素)的名称成为条件。您可以得到的最接近的是使一个或另一个表达式求值为null,在这种情况下,它不会在最终的XML中呈现。