使用表值参数从存储过程调用存储过程

时间:2016-04-12 14:54:19

标签: sql-server

我有一个存储过程(sp_A),它通过表值参数(tvp)接收数据,将所有记录插入表(table_A),然后调用另一个存储过程(sp_B)。 sp_B从tvp中的某些列接收输入参数,并且具有一个类型为nvarchar的输出参数@return。使用单行输入参数执行sp_B工作正常。问题在于使用tvp从sp_A调用sp_B,因为然后sp_B返回多个值,我想要处理,但无法找到合适的数据结构来保存所有返回值。 / p>

我在这里看到了有问题的查询

CREATE PROCEDURE [dbo].[sp_A]       
@return varchar(50) output,
@inputData inputTable readonly    
AS    
    BEGIN TRANSACTION       
    SET NOCOUNT OFF;       
    declare @typeid int, @insertcount int       
    set @typeid = (select typeid from @inputData ) 

    --if typeid is not provided, insert into table_A and exit stored proc
    if(@typeid IS NULL OR @typeid = 0)             
        BEGIN          
          INSERT INTO [dbo].[Table_A]                  
             [cola1], [cola2], [cola3])       
          select _cola1, _cola2, _cola3     
             from @inputData
          set @insertcount = @@ROWCOUNT          
          set @return = 'successful'     
        END

    --else if typeid is provided, insert into table_A, and call sp_B, passing input parameters from @inputData

    ELSE
        BEGIN
          declare @colb1 varchar, @colb2 varchar, @colb3 varchar            
          INSERT INTO [dbo].[Table_A]                          
            ([cola1], [cola2], [cola3], [typeid ])                  
          select _cola1, _cola2, _cola3, _typeid                  
            from @inputData

          select @colb1 = _colb1, @colb2 = _colb2, @colb3 = _colb3    
            from @moTable
          exec @insertcount = sp_B
            @colb1, @colb2, @colb3, @return output

        END    
COMMIT TRANSACTION
select @insertcount 
RETURN

我得到一个"子查询返回超过1个值..."错误,这是可以理解的......但是我需要为应用程序中的进一步处理设置完整的值。返回,处理和传播返回值集到调用程序(在本例中为C#)的最佳方法是什么?

0 个答案:

没有答案