TSQL内部动态查询

时间:2016-02-18 16:05:28

标签: sql-server xml tsql stored-procedures for-xml-path

我正在构建一个动态的SQL查询,但我遇到了一个问题。我需要在此查询中创建子选择,并将结果作为XML输出,因为返回的值不止一个。

-- Open our primary select
SELECT @SQL = 'SELECT('

    -- Begin the first sub select of primary fields
    SELECT @SQL += 'SELECT '

        -- Go through the primary fields temp table and print out the column names
        SELECT @SQL += (
            SELECT f.alias + ', ' 
            FROM @primaryFields AS f
            FOR XML PATH('')
        )
        -- Remove the trailing comma from the last field
        SELECT @SQL = LEFT(@SQL, LEN(@SQL) -1) + ' '

        -- Begin the select statement
        SELECT @SQL += ' FROM View_BS_Render_Dashboard as db '

        -- Create our WHERE Clause
        SELECT @SQL += 'WHERE '

        -- Test Data
        SELECT @SQL += 'db.initiativeCreatorEmpID = @initCreator '

        SELECT @SQL += 'FOR XML PATH(''primary''), ELEMENTS, ROOT(''primaryFields'')'

    SELECT @SQL += ')'

-- Print the closing XML data
SELECT @SQL += 'FOR XML PATH(''data''), ELEMENTS, ROOT(''root'')'

-- Execute the SP
PRINT @SQL
EXEC sp_executesql @SQL, N'@initCreator varchar(12)', @initCreator='1234'

我遇到的问题是INNER FOR XML。它导致所有字段打印为字符串而不是XML。

这是输出:

<root>
  <data>&lt;primaryFields&gt;&lt;primary&gt;&lt;initiativeTitle&gt;Test&lt;/initiativeTitle&gt;&lt;initiativeDescriptionPreview&gt;Test Desc&lt;/initiativeDescriptionPreview&gt;</data>
</root>

正如您所看到的,XML标记在外部选择上工作正常,但它不适用于内部选择。如果我注释掉外部并且只使用内部选择,则这些字段显示正常(作为xml)。

我在这里缺少什么?我将在主根/数据节点内总共有3-4个子选择,因此我需要能够嵌套XML。

0 个答案:

没有答案