Sql server TSQL内部动态查询

Sql server TSQL内部动态查询,sql-server,xml,tsql,stored-procedures,for-xml-path,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 a

我正在构建一个动态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'
我遇到的问题是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>

PrimaryFieldsPrimaryInitiativeTitle测试/初始标题初始描述预览测试描述/初始描述预览
如您所见,XML标记在外部select上运行良好,但在内部select上不起作用。如果我注释掉外部,只使用内部select,那么这些字段将显示为fine(xml)


我错过了什么?我将在主根/数据节点中总共有3-4个子选择,因此我需要能够嵌套XML。

对于XML,请尝试选项
,输入
,用于xml@IvanStarostin就是这些小细节:/。我很感激,这很管用。你为什么要用动态SQL来做这件事呢?我看到的唯一原因是@primaryFields
中的
,这可能是通过另一种方式完成的。。。特别是如果您需要添加更多的列和嵌套,这将是一件非常麻烦的事情…请尝试option
FOR XML,输入
,用于xml@IvanStarostin就是这些小细节:/。我很感激,这很管用。你为什么要用动态SQL来做这件事呢?我看到的唯一原因是@primaryFields
中的
,这可能是通过另一种方式完成的。。。特别是如果你需要添加更多的列和嵌套,这是相当痛苦的颈部。。。