Du bruger ikke standarden på den måde, det er tiltænkt. Det er noget SQL Server evaluerer internt på tidspunktet for indsættelse (eller potentielt opdaterer, hvis default
søgeord er brugt).
Det er ikke beregnet til brug i SELECT
. Overvej, at det kan indeholde vilkårlige udtryk såsom DEFAULT CAST(GETDATE() AS INT) % 2
eller kalder en Scalar UDF. Casting fra streng til bit vil ikke evaluere disse udtryk for dig.
Den eneste måde, du kan gøre noget som dette, ville være at evaluere det separat
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