Bạn đang không sử dụng mặc định theo cách nó được dự định. Đó là thứ mà SQL Server đánh giá nội bộ tại thời điểm chèn (hoặc có khả năng cập nhật nếu default
từ khóa được sử dụng).
Nó không được thiết kế để sử dụng trong SELECT
. Hãy xem xét rằng nó có thể chứa các biểu thức tùy ý như DEFAULT CAST(GETDATE() AS INT) % 2
hoặc gọi UDF vô hướng. Truyền từ chuỗi sang bit sẽ không đánh giá các biểu thức đó cho bạn.
Cách duy nhất bạn có thể làm như vậy là đánh giá nó một cách riêng biệt
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