2017-05-25 56 views
0

好吧,我有以下命令获取我的一些数据与一些订单号。问题是,当数据集不止一个时,订单值保持相同而不是自动递增。如何在SQL存储过程中有一个循环

例如:

如果我取数据逐个在表中的订单值增量按照下面的逻辑,但是如果在一次时间为多于一个的数据中取出的顺序保持相同即它会自动递增所有获取相同值的行。也许某种循环,我可以在这里获取数据并逐一更新。帮助我在存储过程中实现循环/数组条件。我的命令如下:

declare @MaxOrder1 int=0 

select @MaxOrder1 = max([order]) from [dbo].[XYZ_ABC_Table1] where [Id][email protected] 
if (@MaxOrder1 is null) 
begin 

set @MaxOrder1 =0 
end 
set @MaxOrder1 = @MaxOrder1+1 

UPDATE STPC SET STPC.[IsIncluded]= PT.[Value] FROM [dbo].[XYZ_ABC_Table1] STPC join @Table2 PT on (PT.Id = STPC.Id) 
    UPDATE STPC SET STPC.[Order]= case 
        when STPC.[IsIncluded] = 1 then @MaxOrder1 
        else '' 
        END 
        FROM [dbo].[XYZ_ABC_Table1] STPC join @Table2 PT on (PT.Id = STPC.Id) 

回答

0

尝试与while while循环。

declare @MaxOrder1 int=0 

select @MaxOrder1 = max([order]) from [dbo].[XYZ_ABC_Table1] where [Id][email protected] 
if (@MaxOrder1 is null) 
begin 

set @MaxOrder1 =0 
end 
---while loop start 
WHILE (@intFlag <=5) -- replace 5 with your limit 
BEGIN 
set @MaxOrder1 = @MaxOrder1+1 

UPDATE STPC SET STPC.[IsIncluded]= PT.[Value] FROM [dbo].[XYZ_ABC_Table1] STPC join @Table2 PT on (PT.Id = STPC.Id) 
    UPDATE STPC SET STPC.[Order]= case 
        when STPC.[IsIncluded] = 1 then @MaxOrder1 
        else '' 
        END 
        FROM [dbo].[XYZ_ABC_Table1] STPC join @Table2 PT on (PT.Id = STPC.Id) 

END -- while loop end here 
+0

我上面下面让超时错误代码 –

+0

你需要更新多少行?需要您的样本数据和确切的SP。 –

+0

样本数据大约在4-5行......并且SP与上面相同 –

0
declare @MaxOrder1 int=0 
declare @MinOrder int=0 
select top 1 @MaxOrder1 = [order] from [dbo].[XYZ_ABC_Table1] where [Id][email protected] order by [order] 
select top 1 @MinOrder = [order] from [dbo].[XYZ_ABC_Table1] where [Id][email protected] order by [order] desc 

while(@MinOrder<>@MaxOrder1) 
BEGIN 

//rest of your code 


set @[email protected]+1 
end 

假设您的订单是一个序列1,2,3,4,5,而不是1,3,5,7,8

+0

我在“顶部”得到不正确的语法。你能再请检查 –

+0

我修复它再次检查 –