Vous n'utilisez pas la valeur par défaut de la manière prévue. C'est quelque chose que SQL Server évalue en interne au moment de l'insertion (ou peut-être mettre à jour si le default
mot-clé est utilisé).
Il n'est pas destiné à être utilisé dans SELECT
. Considérez qu'il peut contenir des expressions arbitraires telles que DEFAULT CAST(GETDATE() AS INT) % 2
ou appeler une UDF scalaire. La conversion de chaîne en bit n'évaluera pas ces expressions pour vous.
La seule façon de faire quelque chose comme ça serait de l'évaluer séparément
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