为什么CAST不能与SET ROWCOUNT一起使用?

时间:2012-01-09 03:42:56

标签: sql-server stored-procedures

我想知道为什么我不能在存储过程中使用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类型。

1 个答案:

答案 0 :(得分:3)

与SQL Server的TSQL实现的许多情况一样,您无法将表达式传递给SET ROWCOUNTSET ROWCOUNT的有效参数是数字(常量)或简单变量:

SET ROWCOUNT { number | @number_var } 
     

号码@number_var

     

在停止特定查询之前,是否要处理行的数字(整数)。

这同样适用于调用存储过程,因为您不能将表达式作为参数。