sql >> Databáze >  >> RDS >> Sqlserver

Použití výsledku výrazu (např. volání funkce) v seznamu parametrů uložené procedury?

Musíte použít střední proměnnou. SQL Server nepodporuje tento druh operace v samotném seznamu parametrů, ačkoli je na seznamu TODO již několik let! (Viz Připojit položku:Použití skalárních funkcí jako parametrů uložené procedury)

Gramatika pro EXEC je

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

Dokumentace aktuálně není tak jasná, pokud jde o přijatelný formát pro value ale zdá se, že jde pouze o "jednoduché" výrazy, jako jsou doslovné hodnoty nebo @@ systémové funkce s předponou (jako je @@IDENTITY ). Další systémové funkce, jako je SCOPE_IDENTITY() nejsou povoleny (dokonce i ty, které nevyžadují závorky, jako je CURRENT_TIMESTAMP nejsou povoleny).

Takže prozatím musíte používat syntaxi, jako je níže

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. Jak cbrt() funguje v PostgreSQL

  2. MySQL vs. MongoDB

  3. Jak vytvořit tabulku na serveru SQL pomocí dotazu

  4. Jak uložit BLOB jako soubor v PL/SQL?