SQL Server преобразует NULL в пустую строку в select *

Мне нужно выполнить следующее:

 SELECT * FROM [MY_TVF](9186)
 FOR XML AUTO, ELEMENTS

И заменить все NULL значения с пустой строкой '' включить их в XML. Я знаю, что могу выплюнуть элементы с xsi:nil="true" атрибут по настройке ELEMENTS XSINILно я не хочу этого

Я нашел этот вопрос: конвертировать NULL в пустой String SQL Server, где ответ говорит, что я могу использовать ISNULL() вокруг моего запроса. Я попробовал это так:

ISNULL((SELECT * FROM [MY_TVF](9186)),'')
FOR XML AUTO,ELEMENTS

Но я не могу заставить его работать. Я получаю следующую ошибку:

Сообщение 102, Уровень 15, Состояние 1, Строка 1 Неверный синтаксис рядом с ','.

Что я могу сделать, чтобы просто заменить все NULL значения с пустой строкой, чтобы они были включены в XML?

редактировать

Там нет никакого способа заменить * по именам столбцов. Есть причина, по которой мы используем TVF: около 40 столбцов, и они могут со временем меняться. Мой запрос просто выбрать все и вернуть его в виде XML.

2 ответа

Я удалил свой предыдущий ответ и вот последний:

Declare @ColName as Varchar(max)
SEt @ColName=''
SELECT  @ColName= COALESCE( @ColName + ' ISNULL(' +c.name + ','''') ','', '') +
c.name + ', ' 
FROM sysobjects o
JOIN syscolumns c ON o.id = c.id
WHERE o.xtype = 'U'
AND (o.name ='tbName')
SEt @ColName=  ( 'Select ' + SUBSTRING(@ColName,0,LEN(@ColName)-1) + ' FROM tbName')
print @colname
EXEC(@ColName)

Выйти из привычки SELECT *

Посмотри, работает ли это.

SELECT Col1,Col2,Col3,Col4,Col5
FROM
(
SELECT 
ISNULL(Col1,'') Col1,
ISNULL(Col2,'') Col2,
ISNULL(Col3,'') Col3,
ISNULL(Col4,'') Col4,
ISNULL(Col5,'') Col5
FROM [MY_TVF](9186)
) T
FOR XML AUTO,ELEMENTS
Другие вопросы по тегам