Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на резултата от израз (например извикване на функция) в списък с параметри на запомнени процедури?

Трябва да използвате междинна променлива. SQL Server не поддържа този вид операция в самия списък с параметри, въпреки че е в списъка със задачи от няколко години! (Вижте Свързване на елемент:Използвайте скаларни функции като параметри на запаметени процедури)

Граматиката за EXEC е

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

Документацията в момента не е толкова ясна относно приемлив формат за value но изглежда, че са само "прости" изрази като буквални стойности или @@ системни функции с префикс (като @@IDENTITY ). Други системни функции като SCOPE_IDENTITY() не са разрешени (дори тези, които не изискват скоби, като CURRENT_TIMESTAMP не са разрешени).

Така че за момента трябва да използвате синтаксис като следния

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. Проучване на различните ограничения в SQL Server

  2. Функция на SQL Server ROUND():За какво е и защо трябва да ви е грижа?

  3. Създайте функция с таблично значение в SQL Server

  4. Динамичен SQL - EXEC(@SQL) срещу EXEC SP_EXECUTESQL(@SQL)

  5. Кой е най-добрият инструмент за сравняване на две бази данни на SQL Server (схема и данни)?