[dba-SQLServer] SQL Server 2005 - Cursors Or Not Cursors

Francisco Tapia fhtapia at gmail.com
Thu Sep 23 15:58:15 CDT 2010


John,
  in your environment and because you are a single user, your experiences
are more unique than most people who work with SQL Server, you can make
decisions to use cursors on a whim that will impact your server performance,
however, most other SQL programmers and DBA's generally need to address
server performance and availability.  Because of that I recommend that you
(John) continue to use the tool of your choice, however, when offering
advice on cursors, would refrain from stating when a cursor is valid.  I
would hate to have someone's server crash or become unresponsive when it
deals with a community of users.

it's also quite another thing to state that information wasn't provided,
Asger, clearly stated that his example was a subquery example with common
table expressions (CTE) and Rank function,  all terms that can be quickly be
researched at on Books online (BOL).



-Francisco
http://bit.ly/sqlthis   | Tsql and More...




On Thu, Sep 23, 2010 at 11:53 AM, jwcolby <jwcolby at colbyconsulting.com>wrote:

> OK Asger (and Francisco), but this is a perfect example of... WTF over?
>
> I for one haven't a clue what this code does, nor do I have a clue how to
> figure out what this code
> does.
>
> If you are going to recommend code like this you need to tell us how it
> works, otherwise I for one
> will go "ok, now where did I put that cursor..."
>
>
>
> John W. Colby
> www.ColbyConsulting.com
>
> On 9/23/2010 12:13 PM, Asger Blond wrote:
> > Paul,
> > You can use a subquery to make this update. Following example uses a
> Common Table Expression and the Rank function Row_Number():
> >
> > WITH cte (RowNumber, StartCode, EndCode) AS
> > (SELECT ROW_NUMBER() OVER (ORDER BY PersonID), StartCode, EndCode FROM
> YourQuery)
> > UPDATE cte SET StartCode =
> > (SELECT EndCode FROM cte AS cte2
> > WHERE cte.RowNumber>  1 AND cte.RowNumber = cte2.RowNumber+1)
> >
> > Asger
> >
> > -----Oprindelig meddelelse-----
> > Fra: dba-sqlserver-bounces at databaseadvisors.com [mailto:
> dba-sqlserver-bounces at databaseadvisors.com] På vegne af Paul Hartland
> > Sendt: 23. september 2010 16:53
> > Til: SQLServerList
> > Emne: [dba-SQLServer] SQL Server 2005 - Cursors Or Not Cursors
> >
> > To all,
> >
> > We have employees that can do more than one job in a day on our database,
> > when an employee is assigned to a job, the application takes the persons
> > home postcode and the jobs location postcode and stores them in a table,
> we
> > are now creating an estimated mileage.  I can do this based on the
> postcodes
> > supplied but it will be inaccurate as the start postcodes will always be
> the
> > employees home, when the start postcode for the second job should really
> be
> > the postcode of the previous job location.
> >
> > At the moment I have a select query which returns results for an employee
> > where they are doing more than one job in a day, result example below:
> >
> > PersonID     Date                 StartCode            EndCode
> > 111111        29/09/2010        AA1 1AA             BB1 1BB
> > 111111        29/09/2010        AA2 2AA             BB2 2BB
> > 111111        29/09/2010        AA3 3AA             BB3 3BB
> > 111111        29/09/2010        AA4 4AA             BB4 4BB
> >
> > I am thinking of putting these results into a cursor and looping through
> the
> > records updating the startcode with the previous records endcode, so that
> > AA2 2AA will become BB1 1BB, AA3 3AA will become BB2 2BB etc
> >
> > Is this the best way to do this, or could someone point me in a better
> > direction please.
> >
> > Many thanks in advance for all your help.
> >
> _______________________________________________
> dba-SQLServer mailing list
> dba-SQLServer at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-sqlserver
> http://www.databaseadvisors.com
>
>



More information about the dba-SQLServer mailing list