2012-10-18 55 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什麼合併Stagement –

+0

有關檢查,如果記錄存在與否,如果它更新,如果它不 – user204588

+0

@PreetSangha合併是不是在SQL Server 2005 –

相關問題