Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как можем да използваме ISNULL за всички имена на колони в SQL Server 2008?

Можете да използвате 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, но илюстрира техниката.

Имайте предвид, че ако имате друга колона, която трябва да бъде върната, ако стойността е нула, можете да използвате СЪЕДИНЯВАНЕ израз като този:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nvarchar(max) все още се съкращава

  2. Мога ли да запазя „обект“ в база данни на SQL Server?

  3. SharePoint 2010 - Промяна от Kerberos към удостоверяване на базата на твърдения

  4. Защо един оператор за изтриване на SQL ще доведе до блокиране?

  5. sql сървър - проверете дали е възможно предаване