sql >> Databáze >  >> RDS >> Sqlserver

Jak můžeme použít ISNULL pro všechny názvy sloupců v SQL Server 2008?

ISNULL můžete použít vícekrát ve stejném příkazu SQL pro různé sloupce, ale musíte jej napsat samostatně pro každý sloupec:

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

Pokud vytváříte dynamický SQL dotaz, můžete teoreticky shromáždit seznam sloupců v tabulce a vygenerovat dotaz s ISNULL v každém z nich. Například:

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

Tento kód má problémy při převodu některých typů sloupců, jako jsou časová razítka, na nvarchar, ale ilustruje techniku.

Všimněte si, že pokud máte další sloupec, který by měl být vrácen, pokud je hodnota null, můžete použít COALESCE výraz jako tento:

SELECT COALESCE(ProductName, P_Id) AS Product...


  1. Při aktualizaci duplicitního klíče – více sloupců

  2. Jak bezpečně uniknout libovolným řetězcům pro SQL v PostgreSQL pomocí Java

  3. Chyba při deklarování celočíselné proměnné uvnitř uložené funkce MySQL

  4. Pochopení znakových sad a řazení v MySQL