gpt4 book ai didi

SQL 服务器 2000 : generating and incrementing data from column conditionally without using CURSOR

转载 作者:行者123 更新时间:2023-12-01 11:54:10 25 4
gpt4 key购买 nike

:)

有没有办法创建一个索引,并在给定条件下递增,但没有 CURSOR 处理/使用

例如:

sql_tables

我的情况是:“如果当前颜色(这是要检查的项目)与上一个相同:不递增,否则递增一个单位”

这必须在没有 CURSOR USAGE 的 SQL 查询中,当然是一个好时机(至少处理... 10000 行)

提前致谢。

编辑:我忘了提到 NEW_INDEX 列不存在。它必须与查询一起生成。

EDIT2:有没有办法只使用 SELECT/INSERT/UPDATE 语句? (未设置,声明...)

最佳答案

假设有一个名为 Colors 的表,其字段 IDColorColorIndex 类型为 intvarcharint 分别。我还假设 OP 表示 prev/after 基于 asc 顺序中 ID 字段的排序。

您可以在没有光标的情况下执行此操作,并使用 while 循环...但它肯定不是基于设置的:

DECLARE @MyID int
DECLARE @CurrentIndex int
DECLARE @CurrentColor varchar(50)
DECLARE @PreviousColor varchar(50)

SET @CurrentIndex = (SELECT 0)

SET @MyID = (SELECT TOP 1 ID FROM Colors ORDER BY ID ASC)
SET @CurrentColor = (SELECT '')
SET @PreviousColor = (SELECT Color FROM Colors WHERE ID = @MyID)

WHILE (@MyID IS NOT NULL)
BEGIN
IF (@CurrentColor <> @PreviousColor)
BEGIN
SET @PreviousColor = (SELECT Color FROM Colors WHERE ID = @MyID)
SET @CurrentIndex = (SELECT @CurrentIndex + 1)
UPDATE Colors SET ColorIndex = @CurrentIndex WHERE ID = @MyID
END
ELSE
BEGIN
UPDATE Colors SET ColorIndex = @CurrentIndex WHERE ID = @MyID
SET @PreviousColor = (SELECT Color FROM Colors WHERE ID = @MyID)
END
SET @MyID = (SELECT TOP 1 ID FROM Colors WHERE ID > @MyID ORDER BY ID ASC)
SET @CurrentColor = (SELECT Color FROM Colors WHERE ID = @MyID)
END

执行后的结果:

enter image description here

只要 ID 和颜色被索引,性能就不会太差。好的一面是它比使用普通的旧 CURSOR 快一点,而且没有那么邪恶。解决方案支持 SQL 2000、2005 和 2008(因为您使用的是不支持 CTE 的 SQL 2000)。

关于SQL 服务器 2000 : generating and incrementing data from column conditionally without using CURSOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8680830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com