Процедура не возвращает значение

Рейтинг: 0Ответов: 1Опубликовано: 25.04.2015

Создал процедуру

USE [MainBaseInfo]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE sp_CheckIndexComputer (@HashCode INT , @ResultSearch VARCHAR(10) OUTPUT)  
AS
BEGIN
    SET NOCOUNT ON;
        BEGIN TRY
            INSERT INTO [MainBaseInfo].[dbo].[ComputerSystem] VALUES (@HashCode,'','','','','','');
            RETURN SET @ResultSearch = 'No';
        END TRY
        BEGIN CATCH
            RETURN SET @ResultSearch = 'Yes';
        END CATCH
END
GO

пытаюсь выполнить

USE [MainBaseInfo]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
DECLARE @Result VARCHAR (10), @Index INT = 4514556;
EXECUTE dbo.sp_CheckIndexComputer @Index, @Result OUTPUT;
PRINT @Result;
GO

выполняется, но результат не возвращает

Ответы

▲ 1Принят

Вы малость неправильно возвращаете значение из хранимой процедуры.

Ключевое слово RETURN

Служит для безусловного выхода из запроса или процедуры. Инструкция RETURN выполняется немедленно и полностью и может использоваться в любой точке для выхода из процедуры, пакета или блока инструкций. Инструкции, следующие после RETURN, не выполняются.

Поскольку присвоение SET @ResultSearch = 'No'; происходит уже после RETURN, то оно не выполняется.

Вам надо переделать процедуру в такой вид:

CREATE PROCEDURE sp_CheckIndexComputer (@HashCode INT , @ResultSearch VARCHAR(10) OUTPUT)  
AS
BEGIN
    SET NOCOUNT ON;
        BEGIN TRY
            INSERT INTO [MainBaseInfo].[dbo].[ComputerSystem] VALUES (@HashCode,'','','','','','');
            SET @ResultSearch = 'No';
        END TRY
        BEGIN CATCH
            SET @ResultSearch = 'Yes';
        END CATCH
END

И всё заработает.