我有很长的查询,它基于两个值参数(contcode,datime)运行。 我正在使用while循环从另一个表中按顺序获取这些值,运行查询并将结果插入到最终表中:
DECLARE @r TABLE (id int IDENTITY (1,1),lnr char (9), pday datetime)
INSERT INTO @r (lnr, pday)
SELECT TOP 1 lnr, pday FROM memrepay
DECLARE @counter int SET @counter = 1
DECLARE @contcode char (9)
DECLARE @datime datetime
WHILE @counter <= (SELECT COUNT(*) FROM @r)
BEGIN
--long query
END
SET @counter = @counter + 1
END
SELECT * FROM @finaltable
但是长查询仅在我获取1行时有效:
SELECT TOP 1 contcode, datime FROM @tbl
如果我不使用TOP 1,我会收到以下错误消息:
"Subquery returned more than 1 value...."
如何按顺序获取这两个或多个值,根据每个值运行长查询,不会出现此错误?
答案 0 :(得分:0)
我认为您只需要在SET @counter = @counter + 1
循环下的BEGIN...END
块之间向上移动WHILE
。这可能就是为什么它仅适用于TOP 1的原因,因为1是<= COUNT(*)。
DECLARE @r TABLE (id int IDENTITY (1,1),lnr char (9), pday datetime)
INSERT INTO @r (lnr, pday)
SELECT TOP 1 lnr, pday FROM memrepay
DECLARE @counter int SET @counter = 1
DECLARE @contcode char (9)
DECLARE @datime datetime
WHILE @counter <= (SELECT COUNT(*) FROM @r)
BEGIN
--long query
SET @counter = @counter + 1
END
END
SELECT * FROM @finaltable