Du använder inte standarden på det sätt det är tänkt. Det är något som SQL Server utvärderar internt vid tidpunkten för insättning (eller eventuellt uppdateras om default
nyckelord används).
Den är inte avsedd att användas i SELECT
. Tänk på att det kan innehålla godtyckliga uttryck som DEFAULT CAST(GETDATE() AS INT) % 2
eller ringa en skalär UDF. Att kasta från sträng till bit kommer inte att utvärdera dessa uttryck åt dig.
Det enda sättet du kan göra något liknande är att utvärdera 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