2012-10-18 53 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 –

相关问题