Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào chúng ta có thể sử dụng ISNULL cho tất cả các tên cột trong SQL Server 2008?

Bạn có thể sử dụng ISNULL nhiều lần trong cùng một câu lệnh SQL cho các cột khác nhau, nhưng bạn phải viết nó riêng cho từng cột:

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

Nếu bạn đang tạo một truy vấn SQL động, về mặt lý thuyết, bạn có thể thu thập danh sách các cột trong bảng và tạo một truy vấn với ISNULL trên mỗi cột. Ví dụ:

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

Mã này gặp sự cố khi chuyển đổi một số loại cột như dấu thời gian thành nvarchar, nhưng nó minh họa kỹ thuật.

Lưu ý rằng nếu bạn có một cột khác sẽ được trả về nếu giá trị là null, bạn có thể sử dụng COALESCE biểu thức như thế này:

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. Cú pháp và đóng gói INNER JOIN kỳ lạ

  2. Sử dụng INNER JOIN để kết hợp các bảng của máy chủ SQL và hiển thị chúng trong ASP.NET Webforms

  3. Làm thế nào để chuyển các tham số Table-Valued từ java sang thủ tục được lưu trữ trên máy chủ sql?

  4. Thực thi gói SSIS dưới dạng công việc SQLAgent

  5. SQL Server - Mệnh đề IN với nhiều trường