2015-03-19 55 views
4

爲什麼下面的代碼T-SQL調用存儲過程

DECLARE @LogDetail AS NVARCHAR(1000) 
SELECT @LogDetail = CAST(@@ROWCOUNT AS NVARCHAR(30)) + ' rows processed' 
EXECUTE MyProcedure @ExecutionId, @LogDetail 

作品時施放的飛行參數,但是這不?

EXECUTE MyProcedure @ExecutionId, CAST(@@ROWCOUNT AS NVARCHAR(30)) + ' rows processed' 

這很奇怪,因爲動態生成的值使用INSERT語句,但在調用過程時不起作用。

我該如何使用單行代碼執行此操作?

感謝

+0

它說@@ ROWCOUNT和'30'附近的語法不正確 – Shepard 2015-03-19 12:53:33

+0

已經嘗試,當然..它不起作用。 – Shepard 2015-03-19 12:56:39

回答

8

因爲你必須使用EXEC時使用變量表達式不是一個選項。

-- SQL Server Syntax 

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

而且,既然你提到INSERT我們可以看看它,看看它並明確提到的表達式:

[ WITH <common_table_expression> [ ,...n ] ] 
INSERT 
{ 
     [ TOP (expression) [ PERCENT ] ] 
     [ INTO ] 
     { <object> | rowset_function_limited 
      [ WITH (<Table_Hint_Limited> [ ...n ]) ] 
     } 
    { 
     [ (column_list) ] 
     [ <OUTPUT Clause> ] 
     { VALUES ({ DEFAULT | NULL | expression } [ ,...n ]) [ ,...n  ] 
     | derived_table 
     | execute_statement 
     | <dml_table_source> 
     | DEFAULT VALUES 
     } 
    } 
} 
[;] 

我如何用代碼單線辦呢?

聽起來很奇怪,你不能。如果要構建傳遞給存儲過程的信息,則必須將其作爲獨立的SET/SELECT以將其轉換爲變量。

+1

這聽起來是一個非常奇怪的設計決定,但無論如何,如果它是它的方式。 – Shepard 2015-03-19 13:34:00