Я отредактировал свои блоки кода SQL, чтобы более точно показать, что происходит
Скажем, у меня есть простая хранимая процедура:
CREATE PROCEDURE [DBO].[FOO]
(@VARIABLE VARCHAR(500))
AS
BEGIN
SELECT AVG(BAR)
FROM MYTABLE
WHERE THING = @VARIABLE AND RTRIM(LTRIM(THING)) <> ''
END
Когда я вызываюэта хранимая процедура из моей классической ASP-страницы;который в этом случае будет с:
Set foo = Server.CreateObject("ADODB.RecordSet")
curCmd = "Foo 'MYVARIABLE'"
foo.Open curCmd, connectionString
Я получаю эту ошибку (на той же строке, что и страница, открывающая объект foo):
Ошибка арифметического переполнения при преобразовании varchar втип данных числовой.
Если я вызываю хранимую процедуру вручную в терминале (IDE?);тогда работает нормально.
Также, если я воссоздаю хранимую процедуру следующим образом:
CREATE PROCEDURE [DBO].[FOO]
(@VARIABLE VARCHAR(500))
AS
BEGIN
DECLARE @VARIABLE2 VARCHAR(500) = @VARIABLE
SELECT AVG(BAR)
FROM MYTABLE
WHERE THING = @VARIABLE2 AND RTRIM(LTRIM(THING)) <> ''
END
Тогда хранимая процедура работает нормально.
Я попытался удалить и воссоздать хранимую процедуру (безиспользуя трюк повторного объявления), но это не решает проблему.
* Как в стороне;существует проверка данных, вставляемых в таблицу, чтобы убедиться, что для поля THING вводятся только цифры (целые числа).Поле THING также может быть пустым;отсюда и предложение where.
У меня два вопроса:
- Почему повторное объявление одного и того же типа переменной с теми же данными решает проблему?
- есть ли способ исправить мою проблему, не используя этот глупый трюк «повторного объявления»?
Заранее благодарен за любую помощь с этим.