TSQL внутри динамического запроса
Я нахожусь в процессе создания динамического запроса 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'
Проблема, с которой я сталкиваюсь, связана с ВНУТРЕННИМ FOR XML
, Это приводит к тому, что все поля выводятся в виде строки вместо XML.
Вот вывод:
<root>
<data><primaryFields><primary><initiativeTitle>Test</initiativeTitle><initiativeDescriptionPreview>Test Desc</initiativeDescriptionPreview></data>
</root>
Как вы можете видеть, теги XML отлично работают на внешнем выборе, но не работают на внутреннем выборе. Если я закомментирую внешнее и просто использую внутреннее выделение, эти поля будут отображаться нормально (как xml).
Что мне здесь не хватает? У меня будет 3-4 субселекта в основном в главном корне / узле данных, поэтому мне нужно иметь возможность вкладывать XML.