Ответ 1
Вы можете использовать ISNULL несколько раз в одном выражении SQL для разных столбцов, но вы должны написать его отдельно для каждого столбца:
SELECT
ISNULL(ProductName, 'No Data') AS ProductName,
ISNULL(CAST(UnitPrice AS NVARCHAR), 'No Data') AS UnitPrice,
ISNULL(CAST(UnitsInStock AS NVARCHAR), 'No Data') AS UnitsInStock,
ISNULL(CAST(UnitsOnOrder AS NVARCHAR), 'No Data') AS UnitsOnOrder
FROM tbl
Если вы создаете динамический SQL-запрос, теоретически можете собрать список столбцов в таблице и сгенерировать запрос с ISNULL для каждого из них. Например:
DECLARE @SQL nvarchar(max)
SET @SQL = 'SELECT '
SELECT @SQL = @SQL + 'ISNULL(CAST([' + sc.name + '] AS NVARCHAR), ''No Data'') AS [' + sc.name + '],'
FROM sys.objects so
INNER JOIN sys.columns sc ON sc.object_id = so.object_id
WHERE so.name = 'tbl'
-- Remove the trailing comma
SELECT @SQL = LEFT(@SQL, LEN(@SQL) - 1) + ' FROM tbl'
EXEC sp_sqlexec @SQL
Этот код имеет проблемы при преобразовании некоторых типов столбцов, таких как метки времени, в nvarchar, но он иллюстрирует технику.
Обратите внимание, что если бы у вас был другой столбец, который должен быть возвращен, если значение равно null, вы можете использовать выражение COALESCE следующим образом:
SELECT COALESCE(ProductName, P_Id) AS Product...