针对一个或多个条件循环SQL Server

针对一个或多个条件循环SQL Server,sql,sql-server,for-loop,foreach,sql-server-2008-r2,Sql,Sql Server,For Loop,Foreach,Sql Server 2008 R2,我有SQL Server 2008 R2,我正在尝试使用客户端应用程序中的参数运行查询,该参数将返回动态值。然后,应为每个参数单独运行此操作 i、 e 如何循环每个逗号分隔的值并独立运行查询 最终目标是将每次传递作为结果插入一个新的临时表。您可以使用一个表变量来循环值: DECLARE @Values TABLE (Index INT) INSERT @Values VALUES (1, 2, 3, 4, 5) DECLARE @Index INT WHILE EXISTS (SELECT *

我有SQL Server 2008 R2,我正在尝试使用客户端应用程序中的参数运行查询,该参数将返回动态值。然后,应为每个参数单独运行此操作

i、 e

如何循环每个逗号分隔的值并独立运行查询


最终目标是将每次传递作为结果插入一个新的临时表。

您可以使用一个表变量来循环值:

DECLARE @Values TABLE (Index INT)
INSERT @Values VALUES (1, 2, 3, 4, 5)
DECLARE @Index INT
WHILE EXISTS (SELECT * FROM @Values) BEGIN
    SET @Index = (SELECT TOP 1 Index FROM @Values)
    SELECT * FROM Table WHERE ID = @Index
    DELETE @Values WHERE Index = @Index
END
如果值列表是一个序列,则可以使用更典型的循环:

DECLARE @Index INT = 1
WHILE @Index <= 5 BEGIN
    SELECT * FROM Table WHERE ID = @Index
    SET @Index = @Index + 1
END

您可以使用表变量在值之间循环:

DECLARE @Values TABLE (Index INT)
INSERT @Values VALUES (1, 2, 3, 4, 5)
DECLARE @Index INT
WHILE EXISTS (SELECT * FROM @Values) BEGIN
    SET @Index = (SELECT TOP 1 Index FROM @Values)
    SELECT * FROM Table WHERE ID = @Index
    DELETE @Values WHERE Index = @Index
END
如果值列表是一个序列,则可以使用更典型的循环:

DECLARE @Index INT = 1
WHILE @Index <= 5 BEGIN
    SELECT * FROM Table WHERE ID = @Index
    SET @Index = @Index + 1
END

你们的问题是什么?为什么它不能只是一次插入临时表?从ID介于1和5之间的表中选择*INTO T是的,我在查询中进行了一些复杂的数学计算,如果我同时选择了多个ID,查询就会中断。所以我将对ID的每一次传递运行它,这样数字就排成一行了。你们的问题是什么?为什么它不能只是一次插入临时表?从ID介于1和5之间的表中选择*INTO T是的,我在查询中进行了一些复杂的数学计算,如果我同时选择了多个ID,查询就会中断。所以我要对ID的每一次传球进行测试,这样数字就会排成一行。太棒了,这就是我一直在看的。谢谢你的确认。太棒了,这就是我正在做的。谢谢你的确认。