簡體   English   中英

調用存儲過程時動態調用T-SQL

[英]T-SQL cast parameter on the fly when calling a stored procedure

為什么以下代碼

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語句,但在調用過程時則不行。

我怎么能用單行代碼呢?

謝謝

因為在使用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進行,以將其轉換為變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM