2017-02-14 69 views
0

我的任务是编辑SQL Management Studio中的存储过程。我已经完成了所需的工作,但是这样做的一个副产品就是现在这些记录正在填充不需要的数据。我期待排除基于可变LINE_CD数据和希望过滤(收到)的数据是LINE_CD < = 14或LINE_CD = 21根据SQL中的值排除数据库条目while循环

目前我已经编辑其他记录索要LINE_CD < = 14或LINE_CD = 21,但是有一个while循环,它使用了一个设置为21的变量“MAXLINECD”。(这曾经是14,代表我们已经有的行,现在添加了一个新行)我只想要所有的LINE_CD < = 14或LINE_CD = 21

的循环是:

DECLARE @Index int, @LINE_CD int, @ORDER int 
SELECT @LINE_CD = 1, @ORDER = 51 
WHILE @LINE_CD <= @MAX_LINE_CD 
    BEGIN 

我可以写类似:

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 

给我只是LINE_CD的:1,2,3,4,5,6,7,8,9,10,11,12,13,14 & 21?

+0

我的猜测是你实际上并不需要在这里使用循环。循环在SQL服务器中的效率非常低,几乎总是可以由基于集合的逻辑代替,它不仅更快,而且更易于维护,因为它不复杂。 –

回答

1

您不能使用WHERE,因为您没有从表中选择一组。您可以在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