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

Bruger du resultatet af et udtryk (f.eks. funktionskald) i en parameterliste med lagret procedure?

Du skal bruge en mellemvariabel. SQL Server understøtter ikke denne form for operation i selve parameterlisten, selvom den har været på TODO-listen i et par år! (Se Connect Item:Brug skalarfunktioner som lagrede procedureparametre)

Grammatikken for EXEC er

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

Dokumentationen er i øjeblikket ikke så klar med hensyn til et acceptabelt format for value men det ser ud til kun at være "simple" udtryk såsom bogstavelige værdier eller @@ systemfunktioner med præfiks (såsom @@IDENTITY ). Andre systemfunktioner såsom SCOPE_IDENTITY() er ikke tilladt (selv dem, der ikke kræver parenteser såsom CURRENT_TIMESTAMP er ikke tilladt).

Så indtil videre skal du bruge syntaks som f.eks. nedenstående

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. Tjek, om der findes en midlertidig tabel, og slet, om den findes, før du opretter en midlertidig tabel

  2. Hvordan viser man UTF-8-tegn i phpMyAdmin?

  3. Sådan indstilles det aktuelle sprog i SQL Server (T-SQL)

  4. Hvordan holder data ikke sorteret?