Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utiliser la valeur par défaut d'une colonne dans les procédures stockées

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