繁体   English   中英

如何更新临时表的最后3列

[英]How to Update last 3 columns of a temp table

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列,该SP将MD.DomainId作为来自以上join语句的参数

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


Select * from @TempTable

如果我正确理解了您的问题,则可以尝试执行以下操作。

  1. 在您的@TempTable添加新列MyDomainID
  2. 像以前一样将数据插入@TempTable
  3. 有另一个表@TempTable2 ,用于存储从过程中获取的特定@MyDomainID
  4. 加入@TempTable2后,运行@TempTable的更新
  5. 如果需要@MyDomainID不同值, @MyDomainID冲洗并重复步骤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

假定过程[SOADB]。[dbo]。[spLocal_AnotherSpl]仅返回3,即列(Part,Type,Base)和@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。内部写入查询。

您可以设置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来做任何您需要做的事情

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM