sql >> Base de Datos >  >> RDS >> Sqlserver

Usar el valor predeterminado de una columna en los procedimientos almacenados

No está utilizando el valor predeterminado de la manera prevista. Es algo que SQL Server evalúa internamente en el momento de la inserción (o potencialmente se actualiza si el default se utiliza la palabra clave).

No está diseñado para usarse en SELECT . Considere que puede contener expresiones arbitrarias como DEFAULT CAST(GETDATE() AS INT) % 2 o llamar a una UDF escalar. Convertir de cadena a bit no evaluará esas expresiones por usted.

La única forma en que podría hacer algo como esto sería evaluarlo por separado

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