sql >> Database >  >> RDS >> Sqlserver

Het resultaat van een uitdrukking (bijv. Functie-aanroep) gebruiken in een lijst met opgeslagen procedureparameters?

U moet een tussenvariabele gebruiken. SQL Server ondersteunt dit soort bewerkingen niet in de parameterlijst zelf, hoewel het al een paar jaar op de TODO-lijst staat! (Zie Connect Item:Gebruik scalaire functies als opgeslagen procedureparameters)

De grammatica voor EXEC is

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

De documentatie is momenteel niet zo duidelijk over een acceptabel formaat voor value maar het lijken alleen "eenvoudige" uitdrukkingen te zijn, zoals letterlijke waarden of @@ vooraf ingestelde systeemfuncties (zoals @@IDENTITY ). Andere systeemfuncties zoals SCOPE_IDENTITY() zijn niet toegestaan ​​(zelfs degenen die geen haakjes nodig hebben, zoals CURRENT_TIMESTAMP zijn niet toegestaan).

Dus voorlopig moet je syntaxis gebruiken zoals de onderstaande

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. PostgreSQL-index versus InnoDB-index - De verschillen begrijpen

  2. Het Hadoop Input Output System begrijpen

  3. SQL-functie erg traag in vergelijking met query zonder functie-wrapper

  4. MySQL ASIN() Functie – Retourneer de boogsinus van een getal