Výchozí nastavení nepoužíváte tak, jak je zamýšleno. Je to něco, co SQL Server interně vyhodnocuje v době vložení (nebo potenciálně aktualizuje, pokud je default
je použito klíčové slovo).
Není určeno pro použití v SELECT
. Zvažte, že může obsahovat libovolné výrazy, jako je DEFAULT CAST(GETDATE() AS INT) % 2
nebo volání skalárního UDF. Přetypování z řetězce na bit za vás tyto výrazy nevyhodnotí.
Jediný způsob, jak byste mohli něco takového udělat, by bylo vyhodnotit to samostatně
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