Tuesday, September 3, 2013

Looping Transact SQL

Its because the begin... end is not in correct order

IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
DROP TABLE [dbo].[#Temp]
DROP TABLE [dbo].[#SampleData]

GO
Create table #Temp (Prodid nvarchar(35), model nvarchar(35), Trandate datetime)
Create table #SampleData(Prodid nvarchar(35), model nvarchar(35), Trandate datetime)
Go

Insert into #SampleData
Select 'TRC003328042','DRDRZR2BLK','2013-08-31 04:30:33.000' union all---Saturday
Select 'TRC003327670','DRDRZR2BLK','2013-08-31 02:40:23.000'union all---Saturday
Select 'TRC003327822','DROIDRZR','2013-08-31 05:17:28.000'union all---Saturday
Select 'TRC003328342','DROIDRZR','2013-08-31 08:10:27.000'union all---Saturday
Select 'TRC003328387','DROIDRZR','2013-08-31 09:22:01.000'union all---Saturday
Select 'TRC003322836','DRDRZRHDBLK','2013-08-30 23:40:19.000'union all---Saturday
Select 'TRC003326586','DROIDBIO2','2013-08-31 05:50:47.000'union all---Saturday
Select 'TRC003325460','DROIDBIO2','2013-08-30 22:36:50.000'union all---Saturday
Select 'TRC003328994','DRDRZR2WHT','2013-09-02 04:33:44.000'union all-- Monday
Select 'TRC003328998','DRDRZR2WHT','2013-09-02 06:37:13.000'-- Monday
Declare @PFromDate datetime, @PToDate datetime, @timezoneOffset int
set @PFromDate='9/1/2013 6:00AM' --Sunday
set @PToDate='9/2/2013 6:00AM'
set @timezoneOffset=8

While(1=1)
Begin
select Prodid, model, Trandate from #SampleData
Where DATEADD(HOUR,convert(int,@timezoneOffset), Trandate)
BETWEEN DATEADD(DAY,0,@PFromDate) AND DATEADD(DAY,0,@PToDate)
if @@rowcount=0
begin
Set @PFromDate=@PFromDate-1
Set @PToDate=@PToDate-1
end
else
begin
Insert into #Temp(Prodid,model,Trandate)
select Prodid, model, Trandate from #SampleData
Where DATEADD(HOUR,convert(int,@timezoneOffset), Trandate)
BETWEEN DATEADD(DAY,0,@PFromDate) AND DATEADD(DAY,0,@PToDate)
break;--//exit loop
end
end

select * from #Temp





Satheesh


No comments:

Post a Comment