像For循环一样多次执行SQL语句

时间:2015-12-08 21:10:45

标签: sql-server

我有一个SQL查询(正常的)。我必须连续运行 4次(如编程中的For循环)。我怎么能有类似数组的东西并重复查询执行?

SQL Server

更新:

我正在根据列TargetLocation更新一些数据。此目标位置的值为1到5.对于每个值,我需要更新具有相同目标位置的记录。

3 个答案:

答案 0 :(得分:3)

如果在SQL Server Management Studio中运行查询,则可以使用GO N运行查询N次。例如:

insert into MyTable (MyCol) select 'NewRow'
go 4

这将在MyTable中插入4行文字' NewRow'在他们中间。

如果你真的需要在另一个应用程序中循环某些东西,那么我建议使用Peter Tirrell建议的while循环。

请注意,SQL中通常不需要循环。它们可能表示使用过程逻辑而不是基于集合的逻辑编写的代码。

答案 1 :(得分:2)

像一个简单的SQL WHILE循环?

declare @counter int
set @counter = 0

while @counter < 10
begin
select 'foo'
set @counter = @counter + 1
end

答案 2 :(得分:2)

你希望在UPDATE加入,例如:

--create two sample tables that we can work on
declare @tabletoupdate table(ID int,TARGETLOCATION int);
declare @sourcetable table(ID int,SOURCELOCATION int);

--drop in sample data
insert into @tabletoupdate select 1,10 union select 2,20 union select 3, 30;
insert into @sourcetable select 1,100 union select 2,200 union select 3, 300;

--see the 'before'
select * from @tabletoupdate
select * from @sourcetable

--make target look like source
update @tabletoupdate
set
  targetlocation = s.sourcelocation
from
  @tabletoupdate t
  inner join @sourcetable s on s.id = t.id;

--show 'after'
select * from @tabletoupdate
select * from @sourcetable




/*
--if you really insist on doing it with a loop
--bad because its 
--1) slower
--2) less readable
--3) less reliable when other users are accessing the data
declare @currentID int = 0;
declare @maxID int = (select max(id) from @sourcetable);
while @currentID < @maxID
begin
  set @currentID = @currentID + 1;
  declare @newval int = (select sourcelocation
    from @sourcetable
    where id = @currentID
    );
  if @newval is not null
  begin
    update @tabletoupdate
    set TARGETLOCATION = @newval
    where id = @currentID;
  end
end
--*/