sql >> Database >  >> RDS >> Sqlserver

Hoe kunnen we ISNULL gebruiken voor alle kolomnamen in SQL Server 2008?

U kunt ISNULL meerdere keren in dezelfde SQL-instructie voor verschillende kolommen gebruiken, maar u moet het voor elke kolom afzonderlijk schrijven:

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

Als u een dynamische SQL-query bouwt, kunt u in theorie een lijst met kolommen in de tabel verzamelen en op elke kolom een ​​query genereren met ISNULL. Bijvoorbeeld:

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

Deze code heeft problemen bij het converteren van sommige kolomtypen zoals tijdstempels naar een nvarchar, maar het illustreert de techniek.

Merk op dat als u een andere kolom had die moet worden geretourneerd als een waarde null is, u de COALESCE uitdrukking als deze:

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


  1. Hoe de externe sleutel van een MySQL-tabel te wijzigen met behulp van de opdrachtregel

  2. PostgreSQL's array_agg() en array_to_string in MySQL

  3. Hoe een Oracle-query te optimaliseren die to_char heeft in de where-clausule voor datum

  4. Hoe een .sql-bestand exporteren en importeren vanaf de opdrachtregel met opties?