[英]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.