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

Gunakan nilai default kolom dalam prosedur tersimpan

Anda tidak menggunakan default dengan cara yang dimaksudkan. Ini adalah sesuatu yang dievaluasi SQL Server secara internal pada saat penyisipan (atau berpotensi diperbarui jika default kata kunci digunakan).

Ini tidak dimaksudkan untuk digunakan dalam SELECT . Pertimbangkan bahwa itu dapat berisi ekspresi arbitrer seperti DEFAULT CAST(GETDATE() AS INT) % 2 atau memanggil UDF Skalar. Transmisi dari string ke bit tidak akan mengevaluasi ekspresi tersebut untuk Anda.

Satu-satunya cara Anda dapat melakukan hal seperti ini adalah dengan mengevaluasinya secara terpisah

DECLARE @B            BIT
        , @Definition NVARCHAR(max)

SELECT @Definition = N'SELECT @B = '
                     + object_definition(default_object_id)
FROM   sys.columns
WHERE  NAME = 'value'
       AND object_id = OBJECT_ID('dbo.t2')

EXEC sys.sp_executesql
  @Definition,
  N'@B BIT OUTPUT',
  @B = @B OUTPUT

SELECT t1.*,
       ISNULL(t2.value, @B)
FROM   t1
       LEFT JOIN t2
              ON t1.id = t2.id 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:gunakan klausa WHERE di OVER()?

  2. 6 Fungsi untuk Mendapatkan Hari, Bulan, dan Tahun dari Tanggal di SQL Server

  3. Kueri transformasi SQL

  4. Gabungkan nilai baris menjadi CSV (alias GROUP_CONCAT untuk SQL Server)

  5. Mengambil objek kompleks dengan kueri SQL mentah di Entity Framework