Получение значения из хранимой процедуры в другой хранимой процедуре - PullRequest
2 голосов
/ 17 октября 2010

Извините, набирается много кода ..

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

У меня есть одна хранимая процедура InsertMessage, которая выглядит следующим образом:

ALTER PROCEDURE dbo.InsertNewMessage

    (
    @messageText text,
    @dateTime DATETIME,
    @byEmail bit,
    @bySMS bit
    )

AS
    DECLARE @NewId int
    BEGIN
    BEGIN TRANSACTION

    INSERT INTO MessageSet VALUES (@byEmail, @bySMS, @dateTime, @messageText)
    SET @NewId = SCOPE_IDENTITY()
    COMMIT
    END

    RETURN @NewId

, который использует другая хранимая процедура:

ALTER PROCEDURE dbo.InsertMessageFromUserToGroup

    (
    @userEmail nvarchar(256),
    @groupId int,
    @messageText text,

    @bySMS bit,
    @byEmail bit
    )

AS
    --Inserts a new message to a group
    DECLARE @messageId int
    DECLARE @dateTime DATETIME = GETDATE()
    --First check if user is a part of the group
    IF NOT EXISTS (SELECT userEmail FROM UserToGroupSet WHERE userEmail = @userEmail AND groupId = @groupId)
        RETURN 'User not part of group'
    ELSE --User is a part of the group, add message
    BEGIN
        BEGIN TRANSACTION
            SET @messageId = [dbo].[InsertNewMessage](@messageText, @dateTime, @bySMS, @byEmail)
            INSERT INTO MessageToUser VALUES(@userEmail, @messageId)
            INSERT INTO MessageToGroup VALUES(@messageId, @groupId)
        COMMIT
    END

Строка, которая вызывает проблемы, и я не знаю, как с ней справиться:

SET @messageId = [dbo].[InsertNewMessage](@messageText, @dateTime, @bySMS, @byEmail)

Синтаксис выглядит нормально, потому что я могу его сохранить. Когда я запускаю его, я получаю сообщение об ошибке:

Running [dbo].[InsertMessageFromUserToGroup] ( @userEmail = test@test.com, @groupId = 5, @messageText = sdfsdf, @bySMS = false, @byEmail = true ).

Cannot find either column "dbo" or the user-defined function or aggregate "dbo.InsertNewMessage", or the name is ambiguous.
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
No rows affected.
(0 row(s) returned)
@RETURN_VALUE = 
Finished running [dbo].[InsertMessageFromUserToGroup].

Кажется, что другая хранимая процедура не может быть найдена. Я пробовал разные способы вызова процедуры, но все остальное также не удается. Есть предложения?

1 Ответ

5 голосов
/ 17 октября 2010

Попробуйте изменить

SET @messageId = [dbo].[InsertNewMessage](@messageText, @dateTime, @bySMS, 
    @byEmail)

до

EXEC @messageId = [dbo].[InsertNewMessage] @messageText, @dateTime, @bySMS,
     @byEmail

Обратите внимание, что SET был изменен на EXEC, а скобки удалены из параметров.

См. Пример в документации MSDN в конце статьи для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...