我想知道为什么我不能在存储过程中使用CAST函数作为SET ROWCOUNT的参数。
此代码失败:
CREATE PROCEDURE GetTransactions
@Count VARCHAR(5)
AS
SET ROWCOUNT CAST(@Count AS INT);
...
虽然这个带有中间变量的代码可以工作:
CREATE PROCEDURE GetTransactions
@Count VARCHAR(5)
AS
Declare @Rows AS INT;
SET @Rows = CAST(@Count AS INT);
SET ROWCOUNT @Rows;
...
我知道将参数类型更改为INT也可以解决此问题,但调用存储过程的中间层组件需要将所有内容都设置为String类型。
答案 0 :(得分:3)
与SQL Server的TSQL实现的许多情况一样,您无法将表达式传递给SET ROWCOUNT
。 SET ROWCOUNT的有效参数是数字(常量)或简单变量:
SET ROWCOUNT { number | @number_var }
号码@number_var
在停止特定查询之前,是否要处理行的数字(整数)。
这同样适用于调用存储过程,因为您不能将表达式作为参数。