sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan vi bruge ISNULL til alle kolonnenavne i SQL Server 2008?

Du kan bruge ISNULL flere gange i den samme SQL-sætning til forskellige kolonner, men du skal skrive det separat for hver kolonne:

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

Hvis du bygger en dynamisk SQL-forespørgsel, kan du teoretisk samle en liste over kolonner i tabellen og generere en forespørgsel med ISNULL på hver enkelt. For eksempel:

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

Denne kode har problemer, når du konverterer nogle kolonnetyper såsom tidsstempler til en nvarchar, men den illustrerer teknikken.

Bemærk, at hvis du havde en anden kolonne, der skulle returneres, hvis en værdi er null, kan du bruge COALESCE udtryk som dette:

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


  1. Hvorfor tillader MySQL gruppe efter forespørgsler UDEN samlede funktioner?

  2. Oprettelse af en simpel brugergrænseflade for at få adgang til en Oracle-database

  3. Import af felter med flere værdier til Solr fra mySQL ved hjælp af Solr Data Import Handler

  4. Kalder pl/sql-funktion med mybatis 3