хранимая процедура может «возвращать» три типа вещей:
- int возвращаемое значение, с помощью
RETURN
команда - выходное значение параметра, через список параметров:
@YourPartameter anydatatype OUTPUT
- набор результатов:
SELECT * FROM YourTable
ваша процедура не имеет команды RETURN
для нормального выхода, поэтому по умолчанию используется значение ноль.Вам необходимо проверить набор результатов в вашем приложении, если возвращаемое значение равно нулю.
попробуйте ВОЗВРАТИТЬ значение контакта:
CREATE PROCEDURE AUthorContract
@user varchar(10)
AS
DECLARE @contract int
IF(@user NOT IN(select Au_id from Authors))
BEGIn
RETURN -900
END
ELSE
BEGIN
select @contract=contract from from Authors where Au_id = @user
END
RETURN @contract
GO
попробуйте использовать параметр OUTPUT:
CREATE PROCEDURE AUthorContract
@user varchar(10), @contract varchar(30) OUTPUT
AS
IF(@user NOT IN(select Au_id from Authors))
BEGIn
RETURN -900
END
ELSE
BEGIN
select @contract=contract from from Authors where Au_id = @user
END
RETURN 0
GO
Вот набор результатов с явным возвращением:
CREATE PROCEDURE AUthorContract
@user varchar(10)
AS
IF(@user NOT IN(select Au_id from Authors))
BEGIn
RETURN -900
END
ELSE
BEGIN
select contract from from Authors where Au_id = @user
END
RETURN 0
GO