J'ai des problèmes avec un curseur qui se termine aléatoirement. Je veux produire une ligne pour chaque élément, donc pour chaque élément il y a une ligne pour chaque mois en 2012. S'il y a une ligne manquante pour un mois spécifique, cela devrait également être créé.Le curseur ne se termine jamais en T-SQL
Maintenant, elle produit une ligne pour le dernier élément de chaque mois jusqu'à l'année 2057.
Maintenant, j'ai une ligne pour chaque élément jusqu'à ce que tous les mois jusqu'à l'année 2057 et seulement pour un élément dans ma table.
Ma conception de table:
create table tblDataUpdateTest
(
slno int identity(1,1),
cName varchar(50),
cRemarks varchar(50),
[Date] date,
)
insert into tblDataUpdateTest (cName, cRemarks,[Date]) values ('name1','Text1','2012-01-01'),
('name2','Text2','2012-01-01')
Mon code:
declare @y as int
declare @d as int
SET @y = 2012
SET @d = 1
Declare @@counter int
Declare @@month int
set @@counter=0
Declare @@slno int
Declare @@cRemarks varchar(100)
Declare @@cName varchar(50)
Declare @@Date date
set @@month = 1
Declare tmepTbl cursor
For
Select slno,cName,cRemarks,date from tblDataUpdateTest
Open tmepTbl /* Opening the cursor */
fetch next from tmepTbl
into @@slno,@@cName,@@cRemarks,@@Date
while @@fetch_Status=-1
begin
if not exists (select cRemarks from tblDataUpdateTest where MONTH(Date) = @@month AND YEAR(Date) = 2012)
begin
insert into tblDataUpdateTest (cName, cRemarks,[Date]) values (@@cName,'s',(DateAdd(yy, 2012-1900,DateAdd(m, @@month - 1, 01 - 1))))
end
fetch next from tmepTbl
into @@slno,@@cName,@@cRemarks,@@Date
set @@[email protected]@month+1
end
close tmepTbl
Deallocate tmepTbl
Ma table maintenant
cName cRemarks Date
name1 Text1 2012-01-01
name2 Text2 2012-01-01
Je veux follwing arrive:
cName cRemarks Date
name1 Text1 2012-01-01
name1 Text1 2012-02-01
name1 Text1 2012-03-01
name2 Text2 2012-01-01
name2 Text2 2012-02-01
name2 Text2 2012-03-01
et ainsi de suite.
Merci!
Thx! Je vais convertir mon curseur à cette – Knaks