sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan vi använda ISNULL för alla kolumnnamn i SQL Server 2008?

Du kan använda ISNULL flera gånger i samma SQL-sats för olika kolumner, men du måste skriva det separat för varje kolumn:

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

Om du bygger en dynamisk SQL-fråga kan du teoretiskt sett samla en lista med kolumner i tabellen och generera en fråga med ISNULL på var och en. Till exempel:

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

Den här koden har problem när man konverterar vissa kolumntyper som tidsstämplar till en nvarchar, men den illustrerar tekniken.

Observera att om du hade en annan kolumn som skulle returneras om ett värde är null, kan du använda COALESCE uttryck som detta:

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


  1. XCode, Authentication och NSUserDefaults

  2. Problem med att kompilera OCILIB OCI Wrapper Library

  3. Något sätt att sammanfoga dessa två frågor utan subquery?

  4. Kontrollera efter värde i MySQL-raden