2012-10-18 2 views
0

선언적 프로그래밍을 사용하는 것을 들었지만 SQL Server 2005에서 이와 같은 작업을 수행하는 방법을 모릅니다. (이 구문은 정말 빨리 입력했기 때문에 모든 구문이 올바른지 확실하지 않지만 이해할 수있을 것입니다. 제가커서 나 루프없이 어떻게 할 수 있습니까?

declare curs cursor for 
select @Name, @Description, @Id FROM TableA 
open curs 
while(1=1) 
begin 
    fetch next from curs into 
     @Name, 
     @Description, 
     @Id 
    if(@@fetch_status<>0) break 

    set @recordCount = (SELECT COUNT(*) As RecordCount FROM Class1 WHERE   
      Class1Id = @Id) 
    if(@recordCount > 0) 
    begin 

     if(@Name = 'BAD NAME') CONTINUE 
     UPDATE Class1 SET 
      Name = @Name 
      , Description = @Description 
      WHERE Class1Id = @Id 
    end 
    else 
    begin 
     INSERT INTO Class1 (Class1Id, Name, Description) 
     VALUES (@Id, @Name, @Description) 
    end 

end 
close curs 
deallocate curs 
+0

는 제목에 귀하의 질문에 태그를하지 마십시오)을 찾고 있어요. 나는 당신이 당신의 타이틀에 추가 한'SQL Server 2005 '를 제거하고 질문의 맨 아래에있는 태그로 옮겼습니다. 감사! –

답변

2
UPDATE Class1 
SET Name = t.Name, 
Description = t.Description 
FROM Class1 c 
JOIN TableA t ON c.id=t.id 
WHERE t.name <> 'BAD NAME' 

INSERT INTO Class1 (Class1Id, Name, Description) 
select t.Id, t.Name, t.Description 
FROM TableA t 
LEFT JOIN Class1 c on t.id=c.id 
where c.id IS NULL 
+0

TSQL 병합 약식은 무엇입니까 –

+0

레코드가 존재하는지 여부를 확인하고 그렇지 않은 경우 업데이트하는 방법은 무엇입니까? – user204588

+0

@PreetSangha Merge를 SQL Server 2005에서 사용할 수 없음 –

관련 문제