Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use o valor padrão de uma coluna em procedimentos armazenados


Você não está usando o padrão da maneira pretendida. É algo que o SQL Server avalia internamente no momento da inserção (ou potencialmente atualiza se o default palavra-chave é usada).

Não se destina ao uso em SELECT . Considere que ele pode conter expressões arbitrárias como DEFAULT CAST(GETDATE() AS INT) % 2 ou chamando uma UDF escalar. A conversão de string para bit não avaliará essas expressões para você.

A única maneira de fazer algo assim seria avaliá-lo separadamente
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