【问题标题】:Getting value from stored procedure in another stored procedure在另一个存储过程中从存储过程中获取值
【发布时间】:2011-04-26 14:35:43
【问题描述】:

抱歉,后面有很多代码..

我看到另一个使用输出参数的问题。我正在使用 RETURN 语句来返回我想要使用的值。

我有一个如下所示的存储过程 InsertMessage:

更改程序 dbo.InsertNewMessage ( @messageText 文本, @dateTime 日期时间, @byEmail 位, @bySMS 位 ) 作为 声明@NewId int 开始 开始交易 插入消息集值(@byEmail、@bySMS、@dateTime、@messageText) SET @NewId = SCOPE_IDENTITY() 犯罪 结尾 返回@NewId

另一个存储过程使用的:

更改程序 dbo.InsertMessageFromUserToGroup ( @userEmail nvarchar(256), @groupId 整数, @messageText 文本, @bySMS 位, @byEmail 位 ) 作为 --向组插入新消息 声明@messageId int 声明 @dateTime DATETIME = GETDATE() --首先检查用户是否是组的一部分 如果不存在(从 UserToGroupSet 中选择 userEmail,其中 userEmail = @userEmail AND groupId = @groupId) RETURN '用户不属于组' ELSE --用户是组的一部分,添加消息 开始 开始交易 SET @messageId = [dbo].[InsertNewMessage](@messageText、@dateTime、@bySMS、@byEmail) 插入 MessageToUser 值(@userEmail,@messageId) 插入 MessageToGroup 值(@messageId,@groupId) 犯罪 结尾

导致麻烦且我不确定如何处理的行是这一行:

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

语法似乎没问题,因为我可以保存它。当我运行它时,我收到错误消息:

运行 [dbo].[InsertMessageFromUserToGroup](@userEmail = test@test.com,@groupId = 5,@messageText = sdfsdf,@bySMS = false,@byEmail = true)。 找不到列“dbo”或用户定义的函数或聚合“dbo.InsertNewMessage”,或者名称不明确。 EXECUTE 之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 0,当前计数 = 1。 没有行受到影响。 (返回 0 行) @RETURN_VALUE = 完成运行 [dbo].[InsertMessageFromUserToGroup]。

似乎找不到其他存储过程。我尝试了不同的方法来调用该过程,但其他一切都失败了。有什么建议吗?

【问题讨论】:

    标签: tsql stored-procedures


    【解决方案1】:

    尝试改变

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      相关资源
      最近更新 更多