2017-01-04 17 views
1

SQL Server 2008でストアドプロシージャを作成していますが、クエリの影響を受ける行を数える必要があります。@@ ROWCOUNTの正しいタイプは何ですか?

DECLARE 
    @my_rows     AS INT 

、その後

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

それが正常に動作しますが、私はINTとして宣言する場合、私は次のエラーを取得するvarchar型として、私はmy_rowsを宣言した場合:

Arithmetic overflow error converting expression to data type tinyint.

に正しい型である何宣言しますか?私は、行の数値は整数とすることができたと思う0と合計行数の間に。

+0

私はあなたのコードを問題なくテストしました。例外状態として '@ my_rows'を' tinyint'ではなく 'int'と宣言してもよろしいですか? – Magnus

+1

HarshalYが答えて書いたように、['@@ ROWCOUNT'](https://msdn.microsoft.com/en-us/library/ms187316.aspx)のデータ型は実際は' int'です。 私はあなたのコードを(実際のselectステートメントで)試してもエラーは出ません。 あなたのエラーテキストは、 '@ my_rows'を' int'ではなく 'tinyint'と宣言したことを示唆しています。おそらくそれが問題です。 –

+0

あなたは質問のコードからそのエラーを得ることはありません。これが実際に実行しているコードと一致していることを確認してください。 –

答えて

2

MSDNごとに、@@ROWCOUNTの正しい戻り値の型はintです。

tinyintと宣言された@my_rowsでも、SQLコードは問題なく正常に動作します。

+1

これは素晴らしいコメントですが、答えが悪いです。 int型の値をintデータ型に設定しようとしているときにOPがエラーになっている理由を説明しようとします。 –

+0

@@ ROWCOUNTから返された値がtinyintの最大値(255)より大きくない限り、@my_rowsがtinyintとして宣言されている場合、正しく動作します。そうでなければ算術オーバーフローエラーが発生します。 –

+0

@ZoharPeledはい、私はintとtinyintの間に両方がうまく動作することを指摘しました。 – HarshalY

関連する問題