我正在试图弄清楚如何基本循环一些SQL代码。我有一组JobID(只是整数),它们是从像这样的
这样的SQL语句中提取的wget -O- -q -t1 http://localhost:8080/tester |
./tester.pl /doc/path/abc pri=p.txt sec=s.txt
我需要以某种方式将它们设置为变量@jobId并在下面的大型SQL查询中使用此变量(请注意WHERE子句中的查询结尾引用@jobId)。我知道我可以使用游标,但是当我这样做时,生成的结果集是分开的。他们没有“联合”。我需要以某种方式结合结果。这里有什么想法吗?
select jobId from tblJobs_List
答案 0 :(得分:1)
使用像@Squirrel这样的JOIN(或类似的东西,如IN或EXISTS)是最好的,除非有充分的理由不这样做。
如果需要使用循环,请将作业ID存储在具有IDENTITY列的表变量中。使用IDENTITY列作为循环控制器。创建几个变量。首先创建一个临时表,让循环在循环之后输出之前插入值。
DECLARE @LoopNo INT
,@MaxLoopNo INT
,@JobID INT
CREATE TABLE #JobIDs (
LoopNo INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
JobId INT NOT NULL
)
CREATE TABLE #TempTable (
...
)
INSERT INTO #JobIDs
(JobId)
SELECT JobId
FROM tblJobs_List
SET @LoopNo = 1
SET @MaxLoopNo = (SELECT MAX(LoopNo) FROM #JobIDs)
SET @JobID = (SELECT JobId FROM #JobIDs WHERE LoopNo = @LoopNo)
WHILE @LoopNo <= @MaxLoopNo
BEGIN
INSERT INTO #TempTable
SELECT [Your query here]
SET @LoopNo = @LoopNo + 1
SET @JobID = (SELECT JobId FROM #JobIDs WHERE LoopNo = @LoopNo)
END
SELECT *
FROM #TempTable
再次......如果你可以加入,使用或使用EXISTS,那就更好更高效了。这将在单个运行中构建数据,而不是为第一个数据集中的每个记录构建一次。