Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzare il valore predefinito di una colonna nelle stored procedure

Non stai utilizzando l'impostazione predefinita nel modo previsto. È qualcosa che SQL Server valuta internamente al momento dell'inserimento (o potenzialmente aggiorna se default viene utilizzata la parola chiave).

Non è destinato all'uso in SELECT . Considera che può contenere espressioni arbitrarie come DEFAULT CAST(GETDATE() AS INT) % 2 o chiamando un UDF scalare. Il cast da stringa a bit non valuterà queste espressioni per te.

L'unico modo per fare una cosa del genere sarebbe valutarla separatamente

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