2014-07-08 5 views
0

테이블을 업데이트하는 데 어려움이 있습니다 (예 : TableA). 현재 2 개의 루프를 사용하고 있습니다.SQL Server 2008 R2 업데이트 동안 임시 테이블로 루프

1st Loop is based on the data from temp table named : ##tempTableB 
2nd Loop is based on the data from temp table named : ##tempTableC. 

TableA를 이와 같은 스크립트 샘플로 어떻게 업데이트합니까?

declare @amount money; 
declare @i int =1; 
declare @total int; 

declare @j int = 1; 
declare @total2 int; 

declare @numberid nvarchar(14); 
declare @num int; 
declare @principal money; 
declare @margin money; 
declare @insurance money; 

select @numberid=numberid,@amount=amount from ##temptableB 
set @total = @rowcount; -- 48 rows result 

while @i <= @total 
begin 

    select @num=num, 
    @principal=principal, 
    @margin=margin, 
    @insurance=insurance from ##tempTableC 

    set @total2 = @rowcount;-- 48 rows result 

    while @j <=total2 
    begin 

    update tableA set 
    [email protected],[email protected],[email protected]` 
    where [email protected] 
    set @[email protected]+1 
    end 

set @[email protected]+1 
end 
+0

당신은 그 @numberid 단지 ## temptableB에서 하나의 임의의 기록이다 실현? 당신은 당신이 한 테이블에서'UPDATE' 여러 레코드 루프없이 하나의'UPDATE' 문에 다른 테이블에서 여러 레코드를 기반으로 할 수 있습니다 알고 계십니까? –

답변

0

그냥 업데이트 할 수 있습니다 직접 업데이트 스크립트를 작성 다음 표 A.의 값에 따라 테이블 B 또는 C는 단순히 테이블 간의 JOIN에 따라 값을 업데이트하는 새 쿼리 창에서 실행할 수있는 샘플의 그 참여 :

설정 임시 테이블

declare @tempA table (id int, val int) 
declare @tempB table (id int, val int) 

-- Source table 
insert into @tempA (id, val) values (1,100) 
insert into @tempA (id, val) values (2,200) 
insert into @tempA (id, val) values (3,300) 
insert into @tempA (id, val) values (4,400) 

-- table that requires updates 
insert into @tempB (id, val) values (1,0) 
insert into @tempB (id, val) values (2,0) 
insert into @tempB (id, val) values (3,0) 
insert into @tempB (id, val) values (4,0) 

-- output initial values 
Select * from @tempA 
Select * from @tempB 

그런 다음 값과 함께 @tempBval 열을 업데이트하는 업데이트 스크립트를 실행 @tempA는 어디 id 열이 일치 :

Update b 
SET val = a.val 
FROM @tempB b 
    INNER JOIN @tempA a on a.id = b.id 

-- output the updated values 
Select * from @tempA 
Select * from @tempB 
+0

팁 및 빠른 답장을 보내 주셔서 감사합니다. 이것은 완벽하게 적합하지 않지만. 실제로 이것은 할부 일정에 대한 대량 지불 프로세서의 간단한 버전입니다. 이 경우 trans 레코드는 ## tempTableB에 있고 Inst Schedule은 ## tempTableB에 있습니다. 는 ## temptableB에 양에 따라 분할의 DIV 부분이있을 수 있기 때문에 하나 트랜스 기록을 처리해야합니다. 결제가 취급 부 오프 보험 마진 및 주체에 기초하여 순차적으로 분리된다. 분할 후 초과 지급은 다음 행에 저장됩니다. 나는 세트가 적당하지 않을 것이라고 생각한다. –

+0

지금 문제가 해결되었거나 여전히 궁금한 점이 있습니까? – Tanner

+0

나는 다른 해결책으로 이것을 받아 들인다. 어쨌든 고마워. –