Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
skillile
Posting Yak Master
208 Posts |
Posted - 2004-02-19 : 16:20:41
|
| I need to scrub some data and pivot some rows to a column.I am not as familiar with cursors because I really don't use them.I thought this may be an opportunity to try and recurse on the row. Below is sample data and sample cursor.I keep getting: So I know I didn't code it right.Server: Msg 217, Level 16, State 1, Procedure ps_sierra_parcel_scrub, Line 37Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).CATID o_num parcel11 WM330489A 59-052-694-601-0011 WM330489A 0354-121-001-0011 WM330489A 80-02-420-023-0011 WM351178 3905-26-284-01811 WM351178 062845900711 WM351178 061613500611 WM351180 060949300211 WM351180 060949800611 WM351181 063210715511 WM351181 063210715612 xxxx ...etcCREATE PROC ps_sierra_parcel_scrub( @o_num varchar(50), @catid int)ASSET NOCOUNT ONDECLARE @result varchar(8000), @cur_o_num varchar(50), @cur_catid int SELECT @result = '' SELECT @result = @result + parcelnum + ', ' FROM LEGAL..tblsierra_parcel WHERE o_num= @o_num AND catid = @catid --WHAT I WANT --UPDATE othertable SET field= SELECT LEFT(@result, LEN(@result) -2 ) DECLARE scrub_parcel CURSOR LOCAL FOR SELECT o_num, catid FROM LEGAL..tbllegal WHERE o_num > @o_num OPEN scrub_parcel FETCH NEXT FROM scrub_parcel INTO @cur_o_num, @cur_catid WHILE @@FETCH_STATUS=0 BEGIN EXEC ps_sierra_parcel_scrub @cur_o_num, @cur_catid FETCH NEXT FROM scrub_parcel INTO @cur_o_num, @cur_catid END CLOSE scrub_parcel DEALLOCATE scrub_parcel==============================================================================I know I could use this but, I would like to figure out the cursor.CREATE TABLE #t (fn int, val varchar(100) , res varchar(7000),CONSTRAINT thecons PRIMARY KEY (fn,val) )INSERT INTO #t(fn,val) VALUES( 1, 'abc')INSERT INTO #t(fn,val) VALUES( 2, 'nmo')INSERT INTO #t(fn,val) VALUES( 1, 'def')INSERT INTO #t(fn,val) VALUES( 1, 'cpq')INSERT INTO #t(fn,val) VALUES( 2, 'yzz')SET NOCOUNT ONDECLARE @list varchar(8000), @x intSELECT @list = '', @x = -1UPDATE #t SET@list = res = CASE WHEN @x <> fn THEN val ELSE @list + ', ' + val END, @x = fnSELECT fn, MAX(val) v, MAX(res) rFROM #t aGROUP BY fnDROP TABLE #tslow down to move faster... |
|
|
skillile
Posting Yak Master
208 Posts |
Posted - 2004-02-19 : 16:44:58
|
| I think I got it...CREATE PROC ps_sierra_parcel_scrubASSET NOCOUNT ONDECLARE @result varchar(8000), @cur_o_num varchar(50), @cur_catid int DECLARE scrub_parcel CURSOR LOCAL FOR SELECT o_num, catid FROM LEGAL..tbllegal OPEN scrub_parcel FETCH NEXT FROM scrub_parcel INTO @cur_o_num, @cur_catid WHILE @@FETCH_STATUS = 0 BEGIN SELECT @result = '' SELECT @result = @result + parcelnum + ', ' FROM LEGAL..tblsierra_parcel WHERE o_num= @cur_o_num AND catid = @cur_catid --WHAT I WANT SELECT LEFT(@result, LEN(@result) -2 ) FETCH NEXT FROM scrub_parcel INTO @cur_o_num, @cur_catid END CLOSE scrub_parcel DEALLOCATE scrub_parcelslow down to move faster... |
 |
|
|
|
|
|
|
|