sql >> Database >  >> RDS >> Sqlserver

Standaardwaarde van een kolom gebruiken in opgeslagen procedures

U gebruikt de standaard niet zoals bedoeld. Het is iets dat SQL Server intern evalueert op het moment van invoegen (of mogelijk bijwerken als de default zoekwoord wordt gebruikt).

Het is niet bedoeld voor gebruik in SELECT . Bedenk dat het willekeurige uitdrukkingen kan bevatten, zoals DEFAULT CAST(GETDATE() AS INT) % 2 of een Scalaire UDF aanroepen. Casten van string naar bit zal die uitdrukkingen niet voor je evalueren.

De enige manier waarop u zoiets zou kunnen doen, is door het afzonderlijk te evalueren

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. Hoe de tabelstructuur in Oracle wijzigen?

  2. Invoegen in database werkt niet vanwege relaties in database

  3. Fout 2002 Verbinding geweigerd op PHP verbinding maken met MySQL draaiend op MAMP

  4. Hoe een matrix te initialiseren in plsql