Sql server TSQL内部动态查询
我正在构建一个动态sql查询,但遇到了一个问题。我需要在这个查询中创建子选择,并将其结果作为XML输出,因为返回的值不止一个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
-- 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><primaryFields><primary><initiativeTitle>Test</initiativeTitle><initiativeDescriptionPreview>Test Desc</initiativeDescriptionPreview></data>
</root>
PrimaryFieldsPrimaryInitiativeTitle测试/初始标题初始描述预览测试描述/初始描述预览
如您所见,XML标记在外部select上运行良好,但在内部select上不起作用。如果我注释掉外部,只使用内部select,那么这些字段将显示为fine(xml)
我错过了什么?我将在主根/数据节点中总共有3-4个子选择,因此我需要能够嵌套XML。对于XML,请尝试选项,输入
,用于xml@IvanStarostin就是这些小细节:/。我很感激,这很管用。你为什么要用动态SQL来做这件事呢?我看到的唯一原因是@primaryFields
中的,这可能是通过另一种方式完成的。。。特别是如果您需要添加更多的列和嵌套,这将是一件非常麻烦的事情…请尝试optionFOR XML,输入
,用于xml@IvanStarostin就是这些小细节:/。我很感激,这很管用。你为什么要用动态SQL来做这件事呢?我看到的唯一原因是@primaryFields
中的,这可能是通过另一种方式完成的。。。特别是如果你需要添加更多的列和嵌套,这是相当痛苦的颈部。。。