Я новичок в SQL Server, и у меня есть эта ошибка, что я был не в состоянии исправить:SQL вывода сервера и возвращаемое значение в процедуре
Msg 245, Level 16, State 1, процедура информации, Строка 11
Конверсия удалось при преобразовании значения VARCHAR «Steven» для типа междунар
данных можете ли вы показать мне, где ошибка, и как я могу это исправить?
Код выглядит следующим образом.
CREATE PROCEDURE info (@id int, @howMuch int OUTPUT)
AS
SELECT *
FROM emp
WHERE empno = @id;
SELECT @howMuch = COUNT(*)
FROM emp;
DECLARE @name varchar(100)
SELECT @name = ename
FROM emp
WHERE empno = @id
RETURN @name
-- execute the procedure. It throws error.
DECLARE @num_rows int, @who varchar(100)
EXECUTE @who = info 100, @num_rows OUTPUT
SELECT @num_rows, @who
Я заметил, что: Если вместо «возврата» Я использую «печать» для визуализации «@name», процедура работает, и я вижу «@name». Он также хорошо работает, если вместо «return» я помещаю «@name» в качестве выходного параметра. Похоже, что ошибка возникает только при использовании «return» для возврата @name. Почему это? Что мне не хватает, чтобы понять? – andrea
Вы неправильно понимаете, что делает PRINT и RETURN. Печать передает значение компилятору, в то время как RETURN подталкивает значение вызывающему, например, определяемое запросом. Эти правила определены в [документации MSDN] (https://msdn.microsoft.com/en-us/library/ms187926.aspx). Обычно использование FUNCTION было бы уместным, но вы также можете использовать инструкцию OUPUT в своем proc возвращает значение вызывающему. –
Да, теперь я понимаю. Я не понял, как использовать возврат. Я думал, что могу использовать возврат со всеми типами данных, а не только как int. Теперь понятно. Спасибо. – andrea