基于SQL While循环中的值排除数据库项

基于SQL While循环中的值排除数据库项,sql,sql-server,loops,while-loop,ssms,Sql,Sql Server,Loops,While Loop,Ssms,我的任务是在SQL Management Studio中编辑存储过程。我已经完成了所需的工作,但这样做的副产品是,现在记录中填充了不需要的数据。我希望排除基于可变行CD的数据,并希望筛选(接收)行CD的数据。您不能在其中使用,因为您没有从表中选择集合。您可以在WHILE循环中评估条件 DECLARE @Index int, @LINE_CD int, @ORDER int SELECT @LINE_CD = 1, @ORDER = 51 WHILE @LINE_CD <= @MAX_LIN

我的任务是在SQL Management Studio中编辑存储过程。我已经完成了所需的工作,但这样做的副产品是,现在记录中填充了不需要的数据。我希望排除基于可变行CD的数据,并希望筛选(接收)行CD的数据。您不能在其中使用
,因为您没有从表中选择集合。您可以在
WHILE
循环中评估条件

DECLARE @Index int, @LINE_CD int, @ORDER int
SELECT @LINE_CD = 1, @ORDER = 51
WHILE @LINE_CD <= @MAX_LINE_CD
    BEGIN
    IF @LINE_CD <=14 OR @LINE_CD = 21
        BEGIN
声明@Index int、@LINE\u CD int、@ORDER int
选择@LINE_CD=1,@ORDER=51

虽然@LINE\u CD,但我猜您实际上根本不需要在这里使用循环。在sql server中,循环的效率非常低,几乎总是可以被基于集合的逻辑所取代,这种逻辑不仅更快,而且更易于维护,因为它远没有那么复杂。
DECLARE @Index int, @LINE_CD int, @ORDER int
SELECT @LINE_CD = 1, @ORDER = 51
WHERE @LINE_CD =1, @ORDER = 51 not in 
    (SELECT @LINE_CD, @ORDER WHERE LINE_CD <=14 OR LINE_CD = 21)
WHILE @LINE_CD <= @MAX_LINE_CD
  BEGIN 
DECLARE @Index int, @LINE_CD int, @ORDER int
SELECT @LINE_CD = 1, @ORDER = 51
WHILE @LINE_CD <= @MAX_LINE_CD
    BEGIN
    IF @LINE_CD <=14 OR @LINE_CD = 21
        BEGIN