sql >> Databasteknik >  >> RDS >> Sqlserver

Använd standardvärdet för en kolumn i lagrade procedurer

Du använder inte standarden på det sätt det är tänkt. Det är något som SQL Server utvärderar internt vid tidpunkten för insättning (eller eventuellt uppdateras om default nyckelord används).

Den är inte avsedd att användas i SELECT . Tänk på att det kan innehålla godtyckliga uttryck som DEFAULT CAST(GETDATE() AS INT) % 2 eller ringa en skalär UDF. Att kasta från sträng till bit kommer inte att utvärdera dessa uttryck åt dig.

Det enda sättet du kan göra något liknande är att utvärdera det separat

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. PostgreSQL - få materialiserad vykolumnmetadata

  2. Hur man tar bort posterna baserat på föregående och nästa rader och tilldelar datum baserat på vissa villkor

  3. Vårens lagrade procedur - resultat som kommer tillbaka från proceduren är alltid tomma

  4. Hur läser man PostgreSQL wal-fildata? Finns det något kommando för att konvertera PostgreSQL binärt till läsbart textformat?