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

Usare il risultato di un'espressione (ad es. Chiamata di funzione) in un elenco di parametri di una procedura memorizzata?

Devi usare una variabile intermedia. SQL Server non supporta questo tipo di operazione nell'elenco dei parametri stesso sebbene sia presente nell'elenco TODO da alcuni anni! (Vedi elemento Connect:usa le funzioni scalari come parametri della procedura memorizzata)

La grammatica per EXEC è

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

La documentazione al momento non è così chiara su un formato accettabile per value ma sembra essere solo espressioni "semplici" come valori letterali o @@ funzioni di sistema prefissate (come @@IDENTITY ). Altre funzioni di sistema come SCOPE_IDENTITY() non sono ammessi (anche quelli che non richiedono parentesi come CURRENT_TIMESTAMP non sono ammessi).

Quindi per il momento è necessario utilizzare una sintassi come quella di seguito

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