gpt4 book ai didi

sql - 调用存储过程时,T-SQL 动态转换参数

转载 作者:行者123 更新时间:2023-12-02 22:35:20 24 4
gpt4 key购买 nike

为什么是下面的代码

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
}
}
}
[;]

How can I do it with a singleline of code?

尽管听起来很奇怪,但你不能。如果您想要构造要传递给存储过程的信息,则必须将其作为单独的 SET/SELECT 来将其放入变量中。

关于sql - 调用存储过程时,T-SQL 动态转换参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29145119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com