2017-01-04 3 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.

Что такое правильный тип для объявлять? Я думаю, что число строк может быть целым, а betweeb 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 is int.

SQL-код в порядке, исправно работает даже @my_rows, объявленный как tinyint.

+1

Это замечательный комментарий, но плохой ответ. Попробуйте немного сгустить, возможно, попытайтесь объяснить, почему OP получает ошибку при попытке установить значение int для типа данных int (как он утверждает). –

+0

Он будет работать правильно, если @my_rows объявлен как tinyint, если значение, возвращаемое с @@ ROWCOUNT, не больше максимального значения tinyint (255). в противном случае будет ошибка арифметического переполнения. –

+0

@ ZoharPeled да, я только что указал между int и tinyint, что оба работают нормально. – HarshalY

Смежные вопросы