2016-11-28 3 views
3

У меня есть набор динамических запросов, которые возвращают XML как varchars, см. Ниже.SQL Server 2008: Null Return в динамическом XML-запросе

Пример запроса:

set @sqlstr = 'Select ''<?xml version="1.0" encoding="windows-1252" ?>'' + ''<File_Name><Location>'' + (Select a,b,c from table for xml path(''Row'')) + </Location></File_name>''' 

exec(@sqlstr) 

Это работает удовольствие, пока select a,b,c ... запрос не является NULL. Тогда я не получаю внешние элементы, как и следовало ожидать, как:

<?xml version="1.0" encoding="windows-1252"><File_Name><Location><Row></Row></Location></File_name> 

Все я получаю это NULL

После немного погуглить я считаю, этот вопрос является конкатенация NULL результатов является полным NULL Результат. Однако я не могу найти одно решение, дающее мне то, что я ожидаю получить.

Я пробовал (не сказать, что я пытался правильно)

IsNull(Exec(@sqlstring),'*blank elements*') 
xsnil (doesn't seem to work in dynamic queries) 
@result = exec(@sqlstring) then isnull and select 

Кто-нибудь есть лучшее решение? (Предпочтительно малы из-за несколько таких запросы)

ответ

1

Я думаю, что нужно что-то вроде этого:

set @sqlstr = 'Select ''<?xml version="1.0" encoding="windows-1252" ?><File_Name><Location>'' + (Select IsNull(a, '') as a, IsNull(b, '') as b,IsNull(c, '') as c from table for xml path(''Row'')) + </Location></File_name>''' 

exec(@sqlstr) 
+1

Это моя ошибки, я сделал, б, для примера его на самом деле *, как свы в некоторых случаях 20 поля. ваш ответ будет работать, и если нет более короткого метода, а затем перечислить каждый из них, я приму в качестве ответа спасибо –

+0

Если есть более короткий путь, дайте мне знать, чтобы я тоже мог узнать @LRiley –

+0

Будет ли я ' Сообщение о том, что я нахожу –

Смежные вопросы