Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Używasz wyniku wyrażenia (np. wywołania funkcji) na liście parametrów procedury składowanej?

Musisz użyć zmiennej pośredniej. SQL Server nie obsługuje tego rodzaju operacji w samej liście parametrów, chociaż znajduje się na liście TODO od kilku lat! (Zobacz Połącz element:Użyj funkcji skalarnych jako parametrów procedury składowanej)

Gramatyka EXEC jest

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

Dokumentacja nie jest obecnie tak przejrzysta, jeśli chodzi o akceptowalny format dla value ale wydaje się, że są to tylko „proste” wyrażenia, takie jak wartości dosłowne lub @@ funkcje systemowe z prefiksem (takie jak @@IDENTITY ). Inne funkcje systemowe, takie jak SCOPE_IDENTITY() nie są dozwolone (nawet te, które nie wymagają nawiasów, takie jak CURRENT_TIMESTAMP nie są dozwolone).

Więc na razie musisz używać składni takiej jak poniżej

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unikalny złożony klucz składający się z dwóch pól w programie SQL Server z automatycznym przyrostem drugiego pola

  2. Grupy dostępności AlwaysOn programu SQL Server:instalacja i konfiguracja. Część 2

  3. Błąd programu SQL Server 7222:„Tylko dostawca programu SQL Server jest dozwolony w tym wystąpieniu”

  4. Dopasowywanie rozmyte SQL

  5. Co to jest DATALENGTH() w SQL Server?