Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden Sie den Standardwert einer Spalte in gespeicherten Prozeduren

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