我正在尝试做一些事情,用任何一种语言,我花不到一分钟的时间。我正在尝试“排序”存储过程中的表,但令我惊讶的是,这是不可能的。
所以我试图创建一个存储过程,仅用于测试/学习目的,使用while((SELECT))方法来更新某些行,范围从96811到96815(max(id)有点例如96830)。
好的,这就是我要尝试的:
while ((select min(id) from parser) <= 96815)
begin
update parser set tempID=id+1 where id<=96815
if ((select max(tempID) from parser)>=96815)
break
end
现在,问题在于while()并没有执行我想要的操作,这基本上使前N行达到id = 96815。然后UPDATE应该只适用于该子集。
在这一点上,仅UPDATE行本身就可以解决问题,并且足够工作。
那么有什么方法可以通过某种语言来完成我想要的事情,获取记录集,对其进行迭代,更新所需内容并退出吗?
我从MSDN中发布的内容中采用了这种方法:
WHILE ((SELECT AVG(ListPrice) FROM dbo.DimProduct) < $300)
BEGIN
UPDATE DimProduct
SET ListPrice = ListPrice * 2;
IF ((SELECT MAX(ListPrice) FROM dbo.DimProduct) > $500)
BREAK;
END
但是在他们的示例中看起来两者都不起作用。
答案 0 :(得分:1)
通常来说,当您第一次尝试SQL时,最好不要将其与其他常见的非RDBMS语言关联。完全不同,在某种程度上,如果您发现自己在SQL中进行了迭代(使用诸如WHILE
或CURSOR
之类的方法),则几乎总是一个危险信号。
更新某些行,范围从96811到96815
您需要的是...
UPDATE MyTable -- Update your table
SET MyValue = MyValue + 1 -- Increase MyValue by 1
WHERE Id >= 96811 -- Wherever the ID is between 96811 and 96815
AND Id <= 96815
答案 1 :(得分:0)
您也可以这样做:
update parser set tempID=id+1
where id in (select id from table where condition...)