Sie verwenden die Standardeinstellung nicht in der beabsichtigten Weise. Es ist etwas, das SQL Server zum Zeitpunkt des Einfügens intern auswertet (oder möglicherweise aktualisiert, wenn der default
Schlüsselwort wird verwendet).
Es ist nicht für die Verwendung in SELECT
vorgesehen . Beachten Sie, dass es beliebige Ausdrücke wie DEFAULT CAST(GETDATE() AS INT) % 2
enthalten kann oder Aufrufen einer Skalar-UDF. Das Casting von String zu Bit wird diese Ausdrücke nicht für Sie auswerten.
Die einzige Möglichkeit, so etwas zu tun, wäre, es separat auszuwerten
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