2012-01-09 131 views
2

我想知道为什么我不能使用CAST函数作为参数在存储过程中设置ROWCOUNT。为什么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

只是因为你不能!你必须使用中间变量。为什么这是一个大问题? – 2012-01-09 03:43:30

+0

哈哈!哇,我永远不会认为这是显而易见的!我只是想让代码尽可能简单。 – Graham 2012-01-09 03:45:21

回答

3

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

SET ROWCOUNT { number | @number_var } 

数| @number_var

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

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

+0

谢谢,这对我学习TSQL有很大的帮助。 – Graham 2012-01-09 04:10:30

相关问题