如何更新临时表

时间:2015-04-22 13:05:15

标签: sql sql-server stored-procedures join temp-tables

ReqId             RespId         NAME            Part   Type   Base
----------------------------------------------------------------------------
674508621DF6    D5830288F5C2    00000233A   NULL    NULL    NULL
C356C1E03784    D5830288F5C2    00000233A   NULL    NULL    NULL

当我使用存储过程部件运行以下查询时,我得到上述结果。现在我想使用SP的返回值来更新SP。

DECLARE @TempTable Table(
ReqId varchar(255),
RespId  varchar(255),
Name varchar(255),
Part bit,
Type bit,
Base bit)

INSERT  @TempTable (ReqId ,RespId  ,Name)
Select * from DistributesSystemsView DSV
join MyDomain MD with(nolock) on MD.MyDomainID = DSV.MyDomainId
where DSV.LotOperationSegmentResponseId=@LotOpSegRespId

存储过程部分
我应该能够使用以下SP更新part,Type and Base列,该MD将MD.DomainId作为参数从上面的连接语句

 INSERT  @TempTable(Part,Type,Base)
 EXECUTE [SOADB].[dbo].[spLocal_AnotherSpl] MD.MyDomainID


Select * from @TempTable

3 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你可以尝试这样的事情。

  1. MyDomainID
  2. 中添加新列@TempTable
  3. 像以前一样将数据插入@TempTable
  4. 另一个表格@TempTable2,用于存储您从特定@MyDomainID
  5. 的流程中获得的数据
  6. 加入@TempTable
  7. 后,运行@TempTable2的更新
  8. 如果需要@MyDomainID
  9. ,请冲洗并重复步骤3和4

    <强>查询

    DECLARE @TempTable Table(
    MyDomainID  varchar(255),
    ReqId varchar(255),
    RespId  varchar(255),
    Name varchar(255),
    Part bit,
    Type bit,
    Base bit);
    
    INSERT  @TempTable (MyDomainId,ReqId ,RespId  ,Name)
    Select DSV.MyDomainId,ReqId ,RespId  ,Name from DistributesSystemsView DSV
    join MyDomain MD with(nolock) on MD.MyDomainID = DSV.MyDomainId
    where DSV.LotOperationSegmentResponseId=@LotOpSegRespId
    
    
    
    DECLARE @TempTable2 Table(
    Part bit,
    Type bit,
    Base bit)
    
    INSERT  @TempTable(Part,Type,Base)
    EXECUTE [SOADB].[dbo].[spLocal_AnotherSpl] @MyDomainID
    
    UPDATE T
    SET Part = Temp2.Part ,
    Type = Temp2.Type,
    Base = Temp2.Base
    FROM @TempTable T
    CROSS JOIN @TempTable2 Temp2
    WHERE T.MyDomainID = @MyDomainID
    

答案 1 :(得分:0)

假设程序[SOADB]。[dbo]。[spLocal_AnotherSpl]仅返回3列(部分,类型,基数)和&amp; @MyDomainID(int)是要传递给sp ..

的单个参数
Declare @query varchar(max)
Set @query = 'EXEC [SOADB].[dbo].[spLocal_AnotherSpl] ' + ltrim(rtrim( str ( @MyDomainID )))

INSERT  @TempTable(Part,Type,Base)
Exec( @query )

如果无法传递单个参数,请传递表类型或在其他sp ..

中写入查询

答案 2 :(得分:-1)

您可以输出SP的Part, Type, Base输出参数。

CREATE PROCEDURE spMyProc
@MyDomainID int,
@part bit output, 
@type bit output, 
@base bit output
AS
...

然后声明并将变量发送到SP:

DECLARE @part bit, @type bit, @base bit
EXECUTE [SOADB].[dbo].[spLocal_AnotherSpl] MD.MyDomainID, @part output, @type output, @base output

最后,您可以对值@part @type @base

执行任何操作