代码之家  ›  专栏  ›  技术社区  ›  gene

如何为包含联合逻辑的XML编写SQL Select?

  •  0
  • gene  · 技术社区  · 7 年前

    我用下面的语句将两个日期都输入到@xmlData中

    declare @xmlData OUTOUT
    
    SET @xmlData = (SELECT @FileDate AS [FileDate] UNION SELECT @satDate AS [FileDate] FOR XML RAW, ELEMENTS)
    

    然后我将其插入表中:

    DECLARE @ListOfDates TABLE (FileDate varchar(50))
    
            INSERT @ListOfDates (FileDate)
            SELECT Tbl.Col.value('FileDate[1]', 'varchar(50)') 
            FROM @xmlData.nodes('//row') Tbl(Col)  
    

    在执行我的 select 逻辑上,我得到一个错误,说:

    FOR XML和FOR JSON子句在视图内联中无效 函数、派生表和子查询(当它们包含集合时)

    如何解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  1
  •   David Browne - Microsoft    7 年前

    我完全不明白为什么要在这里使用XML。但错误是告诉您将该查询下推到派生表(子查询)或CTE中,如下所示:

    declare @xmlData xml
    declare @filedate date = getdate()
    declare @satdate date = '20140101'
    
    SET @xmlData = (
    
    select * from 
    ( SELECT @FileDate AS [FileDate] UNION ALL SELECT @satDate AS [FileDate] ) d
    FOR XML RAW, ELEMENTS, type
    
    )
    
    select @xmlData