[dba-SQLServer]Do Loop in a sproc

Arthur Fuller artful at rogers.com
Wed Feb 12 13:22:09 CST 2003


Don't you love these one-statement solutions? I certainly do! AFAIC, the
less logic in the FE the better. This is one of the big wars I wage in the
MySQL community, which seems to prefer just the opposite :-)

 

All I want to do from Access is execute sprocs and udfs &c. Let the logic
reside in the sprocs, and ban table access. That's my approach in a
nutshell. Then it doesn't matter what FE they use, could be Access, QA,
Delphi, who cares. If you don't have the keys you don't get in.

 

A.

 

-----Original Message-----
From: dba-sqlserver-admin at databaseadvisors.com
[mailto:dba-sqlserver-admin at databaseadvisors.com] On Behalf Of Djabarov,
Robert
Sent: February 12, 2003 11:55 AM
To: dba-sqlserver at databaseadvisors.com
Subject: RE: [dba-SQLServer]Do Loop in a sproc

 

Ooops. it should be as this:

 

UPDATE tblPrintCharges set ExceptionCode =
left(ExceptionCode,len(ExceptionCode) - 1) WHERE
substring(ltrim(reverse(isnull(ExceptionCode, ' '))), 1, 1) = ','

 

-----Original Message-----
From: Djabarov, Robert 
Sent: Wednesday, February 12, 2003 10:51 AM
To: dba-sqlserver at databaseadvisors.com
Subject: RE: [dba-SQLServer]Do Loop in a sproc

 

UPDATE tblPrintCharges set ExceptionCode =
left(ExceptionCode,len(ExceptionCode) - 1) WHERE charindex(',',
ltrim(reverse(ExceptionCode))) > 0

 

 

-----Original Message-----
From: Chris McIsaac [mailto:cjm at haleyaldrich.com]
Sent: Wednesday, February 12, 2003 9:41 AM
To: dba-sqlserver at databaseadvisors.com
Subject: RE: [dba-SQLServer]Do Loop in a sproc

 

This is what I was afraid of.  In TSQL, there is something called a cursor
that allows you move through a set record by record, 
but the performance is horrible.  A better way...

 

 UPDATE tblPrintCharges set ExceptionCode = ExceptionCode + "18," where
EndServDate = '' 
 UPDATE tblPrintCharges set ExceptionCode = ExceptionCode + "19," where CPT
= ''
 etc.

 


 -- trim the final comma
 UPDATE tblPrintCharges set ExceptionCode =
left(ExceptionCode,len(ExceptionCode) - 1) WHERE ExceptionCode IS NOT NULL
AND ExceptionCode <> ''

 

-----Original Message-----
From: Mark Boyd [mailto:MarkBoyd at mcbeeassociates.com] 
Sent: 12 February 2003 10:18 AM
To: dba-sqlserver at databaseadvisors.com
Subject: RE: [dba-SQLServer]Do Loop in a sproc

Chris -

The code is as follows.

It was written by another programmer about 7 years ago.

I'm sure there is a better way to code this, but it needs to be finished by
the end of the day.

 

Set db = CurrentDb()

Set rstPrint = db.OpenRecordset("SELECT * FROM tblPrintCharges")

    If rstPrint.EOF = False Then

        rstPrint.MoveFirst

        Do Until rstPrint.EOF = True

            Me.txtStatus = "Processing record '" & rstPrint!PatientNo & "'"

            Me.Repaint

            If Nz(rstPrint!EndServDate) = "" Then

                rstPrint.Edit

                rstPrint!ExceptionCode = rstPrint!ExceptionCode & "18,"

                rstPrint.Update

            End If

            If Nz(rstPrint!CPT) = "" Then

                rstPrint.Edit

                rstPrint!ExceptionCode = rstPrint!ExceptionCode & "19,"

                rstPrint.Update

            End If

            If Nz(rstPrint!BegServDate) = "" Then

                rstPrint.Edit

                rstPrint!ExceptionCode = rstPrint!ExceptionCode & "20,"

                rstPrint.Update

            End If

            If Nz(rstPrint!Charge) = "" Then

                rstPrint.Edit

                rstPrint!ExceptionCode = rstPrint!ExceptionCode & "23,"

                rstPrint.Update

            End If

            rstPrint.MoveNext

        Loop

    Else

        MsgBox "There are no outstanding charges.", vbCritical, "No Charges"

    End If

 

If I use the format you suggest, how do I specify the WHILE (condition =
true) without setting the recordset?

Can I say WHILE tblPrintCharges.EOF = False . ?

 

Thanks,

Mark

 

-----Original Message-----
From: Chris McIsaac [mailto:cjm at haleyaldrich.com] 
Sent: Wednesday, February 12, 2003 9:38 AM
To: dba-sqlserver at databaseadvisors.com
Subject: RE: [dba-SQLServer]Do Loop in a sproc

 

The format is...

 

WHILE (condition = true)

BEGIN

    -- do processing

    

END

 

Keep in mind that a direct translation of programming logic from whatever to
TSql may not be the best way to go.  If you post what you are trying to do,
people may be able to give you an alternative to using a loop (which tend to
be much slower than set-based statements).

 

-----Original Message-----
From: Mark Boyd [mailto:MarkBoyd at mcbeeassociates.com] 
Sent: 12 February 2003 9:26 AM
To: SQLServerList
Subject: [dba-SQLServer]Do Loop in a sproc

I am converting VBA code to a stored procedure.

This code includes a pretty large Do Loop.

Is it possible to create a loop in a sproc?

If so, what is the format?

 

Thanks,

Mark Boyd

Sr. Systems Analyst

McBee Associates, Inc.

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://databaseadvisors.com/pipermail/dba-sqlserver/attachments/20030212/ff7df0b2/attachment.html>


More information about the dba-SQLServer mailing list