sql-server - T-SQL WHILE (选择 ())
问题描述
我正在尝试用任何语言在不到 1 分钟的时间内完成一些事情。我正在尝试“某种”迭代存储过程中的表,但令我惊讶的是这是不可能的。
所以我正在尝试创建一个存储过程,仅用于测试/学习目的,使用 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
但看起来在他们的例子中它也不起作用。
解决方案
一般来说,当您第一次涉足 SQL 时,最好不要将其与其他常见的非 RDBMS 语言联系起来。这是完全不同的,以至于如果你发现自己在 SQL 中迭代(使用类似WHILE
orCURSOR
的东西),它几乎总是一个危险信号。
更新某些行,范围从 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
推荐阅读
- matlab - 在每个非空白图像之后显示空白图像
- c - 我可以编写一个可以在 C 中返回一种数据类型或另一种数据类型的函数吗?
- ckeditor - 在 CKEditor5 中更改视图模式的优雅方法
- matlab - 如何将灰度图像更改为红色图像?
- docker - 使用 REST API 和 SSL 自我证书的 Tensorflow 服务 GPU
- html - Bootstrap carousel,如何使用字体真棒箭头更新左右 glypicon
- c++ - 如何在 Mac 上使用 c++2a 编译生成器和协程
- android - 共享元素转换后活动中的内存泄漏进入转换协调器
- string - Rust 中的匹配字符串
- python - 如何在用户键入时防止 print() 抬起输入文本