sql >> Databáze >  >> RDS >> Sqlserver

Použít výchozí hodnotu sloupce v uložených procedurách

Výchozí nastavení nepoužíváte tak, jak je zamýšleno. Je to něco, co SQL Server interně vyhodnocuje v době vložení (nebo potenciálně aktualizuje, pokud je default je použito klíčové slovo).

Není určeno pro použití v SELECT . Zvažte, že může obsahovat libovolné výrazy, jako je DEFAULT CAST(GETDATE() AS INT) % 2 nebo volání skalárního UDF. Přetypování z řetězce na bit za vás tyto výrazy nevyhodnotí.

Jediný způsob, jak byste mohli něco takového udělat, by bylo vyhodnotit to samostatně

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 


  1. Problém s Postgres ALTER TABLE

  2. Jak RANK() funguje v SQL Server

  3. PostgreSQL 10 v systému Linux – LC_COLLATE locale en_US.utf-8 není platný

  4. MySql na odstranění kaskádového konceptu?