根据SQL Server中的条件执行While循环

时间:2018-12-14 06:29:59

标签: sql sql-server tsql sql-server-2014

如何根据以下条件在SQL Server中实现while循环。

然后我需要执行返回ITEM_CODE的select语句,它也可能有多行。

我想在while循环中做的是针对每个ITEM_CODE我需要从其他表(包括joins)中获取数据并将这些数据插入到表中。该循环将基于返回的第一个语句来结束计数。

示例查询结构:

SELECT ITEM_CODE  //While loop must execute the count of this rows
FROM   'TABLE_1'
WHERE  ITEM_AVAILABILITY = 'TRUE'

此语句将返回单行或可能返回多行。 我需要每次将此 ITEM_CODE 传递给while循环。在while循环中,我将从多个表中获取值并将其插入到另一个表中。

WHILE (@COUNT <>0){
//Need to have the ITEM_CODE while looping each time.
//Get data from multiple tables and assign to variables (SET @VARIABLES)
//Insert statement
IF (@COUNT = @COUNT)
     BREAK;
}

SQL Server是否可以,如果可以,请帮助我解决此问题。

1 个答案:

答案 0 :(得分:1)

尝试一下:

DECLARE @DataSource TABLE
(
    [ITEM_CODE] VARCHAR(12)
);

INSER INTO @DataSource ([ITEM_CODE])
SELECT ITEM_CODE  //While loop must execute the count of this rows
FROM   'TABLE_1'
WHERE  ITEM_AVAILABILITY = 'TRUE';

DECLARe @CurrentItemCode VARCHAR(12);

WHILE(EXISTS (SELECT 1 FROM @DataSource))
BEGIN;

    SELECT  TOP 1 @CurrentItemCod = [ITEM_CODE] 
    FROM @DataSource

    --



    --

    DELETE FROM @DataSource
    WHERE [ITEM_CODE] = @CurrentItemCod;

END;

这个想法是在缓冲区表中有数据时执行循环。然后,在循环的每次迭代中,获取一个随机的项目代码值,执行内部操作并从缓冲区中删除该值。

某些人正在使用缓冲区表中的行ID列,例如INT IDENTITY(1,1),并选择第一个元素,进行内部操作,然后按ID删除。但是您需要知道记录的数量,并在每次迭代中增加ID(例如for周期。

)。