Как я могу сделать это без курсора или цикла?
Я слышал, чтобы использовать декларативное программирование, но я не знаю, как сделать что-то подобное в 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
1 ответ
Решение
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