2017-01-04 69 views
1

我在SQL Server 2008中編寫存儲過程,我需要對受查詢影響的行進行計數。@@ ROWCOUNT的正確類型是什麼?

DECLARE 
    @my_rows     AS INT 

然後

SELECT * 
FROM a table 
WHERE some conditions 
SET @[email protected]@ROWCOUNT 

如果我聲明my_rows爲varchar它工作正常,但如果我聲明爲INT我得到以下錯誤:

Arithmetic overflow error converting expression to data type tinyint.

什麼是正確的類型宣佈?我認爲行的數量只能是整數,在0和行的總數之間。

+0

我測試了你的代碼沒有任何問題。你確定你已經將'@ my_rows'聲明爲'int'而不是'tinyint'作爲異常狀態嗎? – Magnus

+1

好吧,正如HarshalY在他的回答中所寫的,['@@ ROWCOUNT'](https://msdn.microsoft.com/en-us/library/ms187316.aspx)的數據類型其實是'int'。 當我試過你的代碼(用一個實際的select語句)時,我沒有錯誤。 你的錯誤文本建議你將'@ my_rows'聲明爲'tinyint'而不是'int',也許這就是問題所在。 –

+0

您不會從問題中的代碼中獲得該錯誤。請確認這與您正在執行的代碼是否與生成該錯誤的代碼實際相符。 –

回答

2

按照MSDN,@@ROWCOUNT的正確返回類型是int。

SQL代碼正常,工作正常,即使@my_rows聲明爲tinyint

+1

這是一個很好的評論,但一個不好的答案。請嘗試稍微加厚它,也許嘗試解釋爲什麼OP在嘗試將int值設置爲int數據類型時出現錯誤(如他聲稱的那樣)。 –

+0

只要從@@ ROWCOUNT返回的值不大於tinyint的最大值(255),就會將@my_rows聲明爲tinyint,它將正常工作。否則會出現算術溢出錯誤。 –

+0

@ZoharPeled是的,我只是指出int和tinyint之間,兩者都工作正常。 – HarshalY

相關問題