sql >> Databasteknik >  >> RDS >> Sqlserver

Använder du resultatet av ett uttryck (t.ex. funktionsanrop) i en parameterlista för lagrad procedur?

Du måste använda en mellanvariabel. SQL Server stöder inte denna typ av operation i själva parameterlistan även om den har funnits på TODO-listan i några år! (Se Anslut objekt:Använd skalära funktioner som lagrade procedurparametrar)

Grammatiken för EXEC är

[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH <execute_option> [ ,...n ] ]
    }
[;]

Dokumentationen är för närvarande inte så tydlig med ett acceptabelt format för value men det verkar bara vara "enkla" uttryck som bokstavliga värden eller @@ systemfunktioner med prefix (som @@IDENTITY ). Andra systemfunktioner som SCOPE_IDENTITY() är inte tillåtna (även de som inte kräver parenteser som CURRENT_TIMESTAMP är inte tillåtna).

Så för tillfället måste du använda syntax som nedan

DECLARE @pID INT;

SET @pID = 1;

/*If 2008+ for previous versions this needs to be two separate statements*/
DECLARE @string VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11))

EXEC WriteLog
  'Component',
  'Source',
  @string 


  1. Ska jag indexera primärnyckelkolumner i Oracle

  2. Kommaseparerade värden med SQL Query

  3. SQLite Query i Android med hjälp av markören

  4. Postgres:FEL:cachad plan får inte ändra resultattyp