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