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

Brug standardværdien af ​​en kolonne i lagrede procedurer

Du bruger ikke standarden på den måde, det er tiltænkt. Det er noget SQL Server evaluerer internt på tidspunktet for indsættelse (eller potentielt opdaterer, hvis default søgeord er brugt).

Det er ikke beregnet til brug i SELECT . Overvej, at det kan indeholde vilkårlige udtryk såsom DEFAULT CAST(GETDATE() AS INT) % 2 eller kalder en Scalar UDF. Casting fra streng til bit vil ikke evaluere disse udtryk for dig.

Den eneste måde, du kan gøre noget som dette, ville være at evaluere 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. Opret forbindelse til SQL Server 2012-databasen med C# (Visual Studio 2012)

  2. Vælg dynamisk kolonner baseret på kolonneværdi

  3. Valg af højeste løn

  4. LINQ til SQL flere tabeller venstre ydre joinforbindelse