您没有按照预期的方式使用默认值。这是SQL Server在插入时进行内部评估的内容(如果使用
default关键字,则可能会进行更新)。
不适用于
SELECt。考虑它可以包含任意表达式,例如
DEFAULT CAST(GETDATE() AS INT) % 2或调用Scalar
UDF。从字符串到位的转换不会为您评估这些表达式。
您可以执行此操作的唯一方法是分别对其进行评估
DECLARE @B BIT , @Definition NVARCHAr(max)SELECT @Definition = N'SELECT @B = ' + object_definition(default_object_id)FROM sys.columnsWHERe NAME = 'value' AND object_id = OBJECT_ID('dbo.t2')EXEC sys.sp_executesql @Definition, N'@B BIT OUTPUT', @B = @B OUTPUTSELECt t1.*, ISNULL(t2.value, @B)FROM t1 LEFT JOIN t2 ON t1.id = t2.id


