2012-01-09 135 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

相關問題