我有一个SQL查询(正常的)。我必须连续运行 4次(如编程中的For循环)。我怎么能有类似数组的东西并重复查询执行?
SQL Server
更新:
我正在根据列TargetLocation
更新一些数据。此目标位置的值为1到5.对于每个值,我需要更新具有相同目标位置的记录。
答案 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
--*/