我试图在“单 ID 列 SELECT 查询”的结果中获取循环的语法。
我的目标是,每次循环旋转以获取当前的 ID 号
查询是这样的:
SELECT Id FROM tbl WHERE SomeField = "Something"
假设结果是: 33 , 48 , 76
我想循环这个结果,所以每次旋转我都会有一个带有当前数字 Id 的变量
Start Loop
@CurrentId = ???
End Loop
我试图在“单 ID 列 SELECT 查询”的结果中获取循环的语法。
我的目标是,每次循环旋转以获取当前的 ID 号
查询是这样的:
SELECT Id FROM tbl WHERE SomeField = "Something"
假设结果是: 33 , 48 , 76
我想循环这个结果,所以每次旋转我都会有一个带有当前数字 Id 的变量
Start Loop
@CurrentId = ???
End Loop
你可以做这样的事情,使用 RDMBS 逐行工作不是一个好主意,但是,嘿:
DECLARE @id INT;
SELECT TOP 1 @id = id FROM tbl WHERE SomeField = 'Something' ORDER BY id;
WHILE @id IS NOT NULL
BEGIN
--Do stuff with @id
DECLARE @old_id INT;
SELECT @old_id = @id;
SELECT @id = NULL;
SELECT TOP 1 @id = id FROM tbl WHERE SomeField = 'Something' AND id > @old_id ORDER BY id;
END;
或者我可能会考虑这样做,因为它在某些方面更清洁:
CREATE TABLE #loop_ids (
loop_id INT IDENTITY(1,1),
id INT);
INSERT INTO #loop_ids (id) SELECT id FROM tbl WHERE SomeField = 'Something' ORDER BY id;
DECLARE @id INT;
DECLARE @loop_id INT;
SELECT @loop_id = ISNULL(MAX(id), 0) FROM #loop_ids;
WHILE @loop_id > 0
BEGIN
SELECT @id = id FROM #loop_ids WHERE loop_id = @loop_id;
--Do stuff with @id
SELECT @loop_id = @loop_id - 1; --Or SELECT @loop_id -= 1;
END;