
October 23rd, 2012, 02:21 PM
|
|
Contributing User
|
|
Join Date: Oct 2004
Posts: 69
Time spent in forums: 14 h 52 m 49 sec
Reputation Power: 9
|
|
|
SQL server 2012 returns different result than SQL server 2008
Hi,
I have a piece of script using cursor to sequence rows in a table. For example, the table looks like this,
SSN, Kid_SSN, Kid_DOB, Seq# to list every person with 1 or more kids. I want to update Seq# to label each kid as 1,2,3... based on Date Of Birth.
I used cursor for update to get it done successfully in SQL server 2008. My current trouble is that this same script wouldn't run as expected in sql server 2012. The problem is in SQL 2012 cursor fetch NEXT more than 1 row at a time. So question is where can I set the cursor fetch size? I searched around but came up no good answer.
Anyone here can shed some light? thanks.
Scrip looks like this:
DECLARE @SocialSecurity varchar(9), @PersonID int, @Dep_SSN varchar(9), @LastName varchar(20),
@FirstName varchar(20), @BirthDate datetime, @Number int
DECLARE @ssn varchar(9) = '000000000'
DECLARE @Mem int = 1
DECLARE cur cursor
FOR SELECT * FROM kids
FOR UPDATE OF Number;
OPEN cur;
FETCH NEXT FROM cur INTO @SocialSecurity, @PersonID, @Dep_SSN, @LastName, @FirstName, @BirthDate, @Number;
WHILE @@FETCH_STATUS = 0
BEGIN
IF @SocialSecurity = @ssn
BEGIN
UPDATE kids
SET Number = @Mem+1
WHERE CURRENT OF cur
SET @Mem = @Mem+1
END;
ELSE
BEGIN
SET @ssn = @SocialSecurity
SET @Mem = 1
END;
FETCH NEXT FROM cur INTO @SocialSecurity, @PersonID, @Dep_SSN, @LastName, @FirstName, @BirthDate, @Number;
END;
CLOSE cur;
DEALLOCATE cur;
Last edited by sqgs : October 23rd, 2012 at 03:09 PM.
|