2010-10-17 126 views
2

对不起价值,大量的代码来了..充分利用存储过程中的另一个存储过程

我看到像这样的使用输出参数的另一个问题。我正在使用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 = [email protected], @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]. 

看起来好像其他存储过程无法找到。我尝试了不同的方式来调用这个过程,但其他一切都失败了。有什么建议么?

回答

5

尝试改变

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

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

注意SET已更改为EXEC,和括号已经从参数中移除。

有关详细信息,请参阅本文末尾的MSDN documenation中的示例。

+0

谢谢,它现在有效。有用的链接! – Phil 2010-10-17 15:25:50