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