T-SQL Using Parameter Table like a Cursor

The Google gods seem to like a very old page of mine about using Cursors in T-SQL. So, from time to time I get commnets via email.  Thought I  would share an alternative to using cursors.

Here is a bit of code works like a cursor, but perhaps a bit more less intense on your SQl Server System.  I cobbled it pretty quick and it seems to run ok on SQL Server 2005.

Thanks – Jack

USE MASTER
Go
/*
CONSUME PARAMETER TABLE Like a CURSOR
JCD 2-3-2010

SWITCH TO TEMP Table when working
with large Data sets

*/
DECLARE  @ID INT — Begining Record
,@maxID INT — Max ID from Parameter Table
— DECLARE/CREATE THE TABLE

DECLARE @ObjectTable TABLE(
ID INT IDENTITY(1,1) NOT NULL
,ObjectName VARCHAR(75) NOT NULL
,SumofallChars BIGINT DEFAULT (0)
)

/*
To replace with Temp Table
A. TEST for #ObjectTable Table and DROP
and Create #ObjectTable

IF OBEJCT_ID(‘tempdb.dbo.#ObjectTable’,’u’) IS NOT NULL
BEGIN
DROP #ObjectTable
END

BEGIN
CREATE TABLE #ObjectTable
(
ID INT IDENTITY(1,1) NOT NULL
,ObjectName VARCHAR(75) NOT NULL
,SumofallChars BIGINT DEFAULT (0)
)�
END

B. Then replace all the references to #ObjectTable

*/

— POPULATE PARMETER TABLE
— Just Grabbing top 15 Records
INSERT INTO @ObjectTable (ObjectName)
SELECT DISTINCT
TOP 15
RTRIM([name]) as [ObjectName]
FROM   sys.sysobjects where type=’s’
ORDER BY  RTRIM([name])
— Part That uses the Table Row By Row
— Find the number or Rows
SELECT @ID = 1
,@MaxID = MAX(ID)
FROM @ObjectTable

— Test For Empty Data Set

If (Select Count(1) FROM  @ObjectTable) = 0
BEGIN
PRINT ‘No Records Found’
GOTO ENDPROC
END
/*
Display ALL Data
RETURN all Rows in PARAMETER TABLE
Normall Comment out except for Debugging
*/
SELECT ID, ObjectName , SumofallChars
FROM  @ObjectTable
ORDER BY ID
— Start to Loop through records

WHILE @ID <= @MaxID
BEGIN
SET NOCOUNT ON

— Bit of Code to Pretend this is useful
/*
A. Select Data
B. Update Data Row
1. reverse Name
2. Create a Cumlative Sount of all objectname
Characters then add length of current row
3. Return Data
*/

—Do a Weird Useless update
UPDATE  @ObjectTable
SET [ObjectName] = REVERSE([ObjectName])
,SumofallChars = (SELECT SUM(SumofallChars) from @ObjectTable )  + LEN(ObjectName)
FROM @ObjectTable
WHERE ID = @ID

— Increment @ID to step through Records
SET @ID=@ID +1
END
— RETURN ‘Updated’ Rows in PARAMETER TABLE
SELECT  ID, ObjectName , SumofallChars
FROM  @ObjectTable
ORDER BY ID DESC
ENDPROC:

GO

Tiny URL for this post:
 

Share the joy

Comments are closed.