Nie używasz domyślnego w sposób, w jaki jest przeznaczony. Jest to coś, co SQL Server ocenia wewnętrznie podczas wstawiania (lub potencjalnie aktualizacji, jeśli default
słowo kluczowe jest używane).
Nie jest przeznaczony do użycia w SELECT
. Weź pod uwagę, że może zawierać dowolne wyrażenia, takie jak DEFAULT CAST(GETDATE() AS INT) % 2
lub wywołanie skalarnego UDF. Rzutowanie z ciągu na bit nie oceni tych wyrażeń za Ciebie.
Jedyny sposób, w jaki możesz zrobić coś takiego, to ocenić to osobno
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