Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana kita bisa menggunakan ISNULL untuk semua Nama Kolom di SQL Server 2008?

Anda dapat menggunakan ISNULL beberapa kali dalam pernyataan SQL yang sama untuk kolom yang berbeda, tetapi Anda harus menulisnya secara terpisah untuk setiap kolom:

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

Jika Anda sedang membangun kueri SQL dinamis, Anda secara teoritis dapat mengumpulkan daftar kolom dalam tabel dan menghasilkan kueri dengan ISNULL pada masing-masing kolom. Misalnya:

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

Kode ini memiliki masalah saat mengonversi beberapa jenis kolom seperti stempel waktu ke nvarchar, tetapi ini menggambarkan tekniknya.

Perhatikan bahwa jika Anda memiliki kolom lain yang harus dikembalikan jika nilainya nol, Anda dapat menggunakan COALESCE ekspresinya seperti ini:

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. Menghubungkan Aplikasi yang berjalan di Linux ke Amazon Relational Database Services (RDS) untuk SQL Server

  2. SQL Server:Apa artinya 1 ++ 2?

  3. Bagaimana cara menggunakan tabel yang dimasukkan\dihapus dalam prosedur tersimpan?

  4. BATAS 10..20 di SQL Server

  5. Perbaiki "Kesalahan overflow aritmatika mengonversi int ke tipe data numerik" di SQL Server