Вие не използвате по подразбиране по начина, по който е предназначен. Това е нещо, което SQL Server оценява вътрешно по време на вмъкване (или потенциално актуализиране, ако default
използва се ключова дума).
Не е предназначен за използване в SELECT
. Помислете, че може да съдържа произволни изрази като DEFAULT CAST(GETDATE() AS INT) % 2
или извикване на Scalar UDF. Прехвърлянето от низ към бит няма да оцени тези изрази вместо вас.
Единственият начин да направите нещо подобно е да го оцените отделно
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