代码之家  ›  专栏  ›  技术社区  ›  Phil

从另一个存储过程中的存储过程获取值

  •  2
  • Phil  · 技术社区  · 15 年前

    很抱歉,有很多代码……

    我看到了另一个使用输出参数的问题。我正在使用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 回复  |  直到 15 年前
        1
  •  5
  •   LittleBobbyTables - Au Revoir    15 年前

    尝试改变

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

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

    注意到 SET 已更改为 EXEC ,括号已从参数中删除。

    请参见中的示例 MSDN documenation 在文章的最后,了解更多信息。