[dba-SQLServer]Sproc runs and then it doesn't

Francisco H Tapia my.lists at verizon.net
Tue Jul 29 13:12:00 CDT 2003


Thanks Billy,
   that seems to have sped up the sproc from a runtime of 13seconds down to
8-7 seconds  nice... tested on a fellow developer's pc, I was running Access
2k out of the box and at work I have Access2k sr1, the other developer has
Access2k sr1 loaded at home and it ran well there too.

so there is some other problem locally at work that breaks this.


-Francisco
http://rcm.netfirms.com

On Tuesday, July 29, 2003 10:26 AM [GMT-8],
Billy Pang <tuxedo_man at hotmail.com> wrote:

: There are a lot of temp tables in the sprocs you are trying to
: running.  You can convert them into table variables. They work just
: like regular temporary tables except that it is not written onto disk.
:
: look up data type - table in BOL.
:
: ==cut here ===========================
: SET NOCOUNT ON
: DECLARE @my_product TABLE(PROD_ID INT IDENTITY(1,1) PRIMARY KEY,
: PROD_NAME VARCHAR(50), PROD_DATE SMALLDATETIME DEFAULT(GETDATE()))
:
: INSERT INTO @my_product(PROD_NAME) VALUES('red book');
: INSERT INTO @my_product(PROD_NAME) VALUES('blue book');
: INSERT INTO @my_product(PROD_NAME) VALUES('green book');
: INSERT INTO @my_product(PROD_NAME) VALUES('white book');
:
: UPDATE @my_product SET PROD_NAME = 'BLUE BOOK1' WHERE PROD_ID = 2
: DELETE FROM @my_product where PROD_ID = 3
: SELECT * FROM @my_product
:
: SET NOCOUNT OFF
: =============================
:
:
:: From: "Francisco H Tapia" <my.lists at verizon.net>
:: Reply-To: dba-sqlserver at databaseadvisors.com
:: To: <dba-sqlserver at databaseadvisors.com>
:: Subject: Re: [dba-SQLServer]Sproc runs and then it doesn't
:: Date: Tue, 29 Jul 2003 09:14:44 -0700
::
:: That's right Billy, If unmodiffied Database / sprocs and Unmoddifed
:: Front End Access ADP return the data via Access and QA as expected
:: at home the machine is an AMD2000+ w/ 1gig of ram Win2k SP2 +
:: ss2kdev SP3
::
:: WORK: Dual 800 Intel Xeon  w/1gig of ram Win2kServer SP2 +ss2kserver
:: SP3
::
:: well I tried just as you suggested... and no dice :( the >= still
:: doesnt return via access
:: what do you mean Table Variables?
::
:: Thanks
::
:: -Francisco
:: http://rcm.netfirms.com
::
:: On Tuesday, July 29, 2003 8:28 AM [GMT-8],
:: Billy Pang <tuxedo_man at hotmail.com> wrote:
::
::: so both sprocs work perfectly at home?
:::
::: Can you alter both sprocs so that it just does one simple select?
::: if both sprocs work at the office, then alter the sproc again using
::: the real code and see if it still works.
:::
::: also, are you running both sprocs concurrently?
:::
::: also, since you are using ss2k, how about replacing your temp tables
::: with table variables?
:::
:::
:::
:::
:::: From: "Francisco Tapia" <my.lists at verizon.net>
:::: Reply-To: dba-sqlserver at databaseadvisors.com
:::: To: <dba-sqlserver at databaseadvisors.com>
:::: Subject: Re: [dba-SQLServer]Sproc runs and then it doesn't
:::: Date: Tue, 29 Jul 2003 02:05:33 -0700
::::
:::: Billy,
::::   I took the adp, and the database home and updated my home sql
:::: developer copy with the office copy of the server w/ no code
:::: changes and off the cuff copy to my hdd from the office the adp
:::: now displays the record, Sql Server 2000 SP3, but at the office it
:::: still does not and it is the same version of the db, and access
:::: adp.
::::
:::: this is most bazaar.
::::
::::
:::: -Francisco
:::: http://rcm.netfirms.com/
::::
:::: On Tuesday, July 29, 2003 12:36 AM [GMT -8],
:::: Francisco Tapia <my.lists at verizon.net> wrote:
::::
::::: I'm running it as windows authentication at the moment for both QA
::::: and the ADP, doh I did not think to use the profiler, I will check
::::: that next...
:::::
::::: -Francisco
::::: http://rcm.netfirms.com/
:::::
::::: On Monday, July 28, 2003 6:09 PM [GMT -8],
::::: Billy Pang <tuxedo_man at hotmail.com> wrote:
:::::
:::::: Are you tried running both sprocs in QA using the security
:::::: authentication as ADP (eg. same login)?
:::::: also, does SQL Profiler reveal anything?
::::::
::::::
::::::
::::::
::::::
::::::: From: "Francisco H Tapia" <my.lists at verizon.net>
::::::: Reply-To: dba-sqlserver at databaseadvisors.com
::::::: To: <dba-SQLServer at databaseadvisors.com>
::::::: Subject: [dba-SQLServer]Sproc runs and then it doesn't
::::::: Date: Mon, 28 Jul 2003 16:01:33 -0700
:::::::
::::::: I have a stored procedure in my database that runs fine in QA.
::::::: In fact I created 2 versions of this sproc and both of them run
::::::: fine
::::::: in QA.  In an ADP
::::::: that I have one sproc runs and the other does not.  What would
::::::: be different?
:::::::
::::::: In the where clause I am checking for >= or <.
:::::::
::::::: The code is "I D E N T I C A L" in both sprocs lets call them
::::::: stp_New and stp_Old  the new checks for any new entries since
::::::: today 12:00am, and the Old
::::::: checks for any records older than today at 12:00am.
:::::::
::::::: If I run the sproc in Access (ADP) it does not give me any data
::::::: for stp_New but it does give me the correct results for stp_Old.
::::::: If I
::::::: go to QA I can run either sproc and they both execute correctly.
::::::: I
::::::: am at a loss about this
::::::: one... anyone ever run into something similar?
:::::::
::::::: This is my code...
:::::::
:::::::
:::: -----------------------------------------------------------------------
-
:::: -
::::::: ---
::::::: ----------------------------
::::::: ALTER            PROCEDURE stp_004A_lstHelpDeskNewCalls
::::::: (@LoginID NVARCHAR(50)) AS
:::::::
::::::: SET NOCOUNT ON
::::::: Declare @SetDateTime as datetime, @entryUser as uniqueidentifier
::::::: SET @entryUser = dbo.udfEntryUSER(@LoginID)
::::::: SET @SetDateTime = CAST (
:::::::        CAST (DATEPART(m, getUTCdate()) AS VARCHAR(4)) + '/' +
:::::::        CAST (DATEPART(d, getUTCdate()) AS VARCHAR(4))+ '/' +
:::::::        CAST (DATEPART(yyyy, getUTCdate()) AS VARCHAR(4)) + '
:::::::    00:00:00' AS DATETIME)
:::::::
::::::: IF EXISTS (select * from tempdb.dbo.sysobjects where id =
::::::: object_id(N'tempdb..#MaxStatus')) BEGIN
:::::::  DROP TABLE #MaxStatus
::::::: END
:::::::  CREATE TABLE #MaxStatus
:::::::  ([HelpDeskID] [UniqueIdentifier] Not Null,
:::::::  [HelpStatusID] [int] Not Null,
:::::::  [entryTime] [dateTIME] Not Null)
:::::::  INSERT INTO #MaxStatus(HelpDeskID, HelpStatusID, entryTIME)
:::::::   Select A.HelpDeskID, A.HelpStatusID, A.entryTIME FROM
::::::: dbo.tbl_HelpDeskStatus AS A WITH(NOLOCK)
:::::::   LEFT OUTER JOIN
:::::::   (SELECT HelpDeskID, Max(entryTIME) as entryTIME From
::::::: dbo.tbl_HelpDeskStatus  WITH(NOLOCK) Group By HelpDeskID) AS B
:::::::   ON (A.HelpDeskID = B.HelpDeskID AND A.entryTIME = B.entryTIME
::::::: AND HelpStatusID < 2)
:::::::
::::::: IF EXISTS (select * from tempdb.dbo.sysobjects where id =
::::::: object_id(N'tempdb..#HelpDeskCallDetails')) BEGIN
:::::::  DROP TABLE #HelpDeskCallDetails
::::::: END
:::::::  CREATE TABLE #HelpDeskCallDetails
:::::::  ([HelpDeskID] [uniqueidentifier] Not Null,
:::::::   [CallNotes] [nvarchar](20) Null,
:::::::   [ContactAddrID] [uniqueidentifier] Null,
:::::::   [entryTIME] [datetime] Null,
:::::::   [entryUSER] [uniqueidentifier] Null)
:::::::
:::::::  INSERT INTO #HelpDeskCallDetails (HelpDeskID, CallNotes,
::::::: ContactAddrID, entryTIME, entryUSER)
:::::::   Select A.HelpDeskID, LEFT(A.CallNotes, 20), A.ContactAddrID,
::::::: A.entryTIME,
::::::: A.entryUSER FROM dbo.tbl_HelpDeskCallDetails AS A  WITH(NOLOCK)
:::::::   INNER JOIN
:::::::   (SELECT HelpDeskID, Max(entryTIME) as entryTIME From
::::::: dbo.tbl_HelpDeskCallDetails  WITH(NOLOCK) Group By HelpDeskID)
:::::::   AS B ON (A.HelpDeskID = B.HelpDeskID AND A.entryTIME =
::::::: B.entryTIME )
:::::::
:::::::
:::::::
::::::: Select HD.CaseNumberID, M.SN,Ctc.ContactName,Co.CompanyName,
::::::: Addr.LocationName,ZipList.State,
:::::::   HelpDeskCallDetails.CallNotes AS [Call Notes],
::::::: HelpDeskCallDetails.entryTIME
::::::: FROM dbo.tbl_HelpDesk HD WITH(NOLOCK) INNER JOIN
::::::: dbo.tbl_Machine M WITH(NOLOCK)  ON HD.MachineID = M.MachineID
:::::::
:::::::  LEFT OUTER JOIN
:::::::   (SELECT * FROM #MaxStatus WITH(NOLOCK) ) AS MaxStatus
:::::::   ON HD.HelpDeskID = MaxStatus.HelpDeskID
:::::::
:::::::  INNER JOIN
:::::::   (SELECT * FROM #HelpDeskCallDetails WITH(NOLOCK) ) AS
::::::: HelpDeskCallDetails
:::::::   ON HD.HelpDeskID = HelpDeskCallDetails.HelpDeskID
:::::::
:::::::  LEFT OUTER JOIN dbo.tbl_ContactAddress AS CtcAddr  WITH(NOLOCK)
::::::: ON HelpDeskCallDetails.ContactAddrID = CtcAddr.ContactAddrID
:::::::  LEFT OUTER JOIN dbo.tbl_Contacts AS Ctc  WITH(NOLOCK) ON
::::::: CtcAddr.ContactID
::::::: = Ctc.ContactID
:::::::  LEFT OUTER JOIN dbo.tbl_Address As Addr  WITH(NOLOCK) ON
::::::: CtcAddr.AddrID = Addr.AddrID
:::::::  LEFT OUTER JOIN dbo.tbl_Company AS Co  WITH(NOLOCK) ON
::::::: Addr.CompanyID = Co.CompanyID
:::::::  LEFT OUTER JOIN dbo.tbl_AddrZipList AS ZipList  WITH(NOLOCK) ON
::::::: Addr.ZipID
::::::: = ZipList.ZipID
:::::::
::::::: --THIS LINE BELOW IS WHAT CHANGES from >= to <, both run in QA,
::::::: but only the
::::::: OLD (<) runs in Access
:::::::
::::::: Where HelpDeskCallDetails.entryTIME >=  @SetDateTime AND
::::::: HelpDeskCallDetails.entryUSER = @entryUser
:::::::
::::::: ORDER BY HelpDeskCallDetails.entryTIME ASC
:::::::
:::::::
::::::: IF EXISTS (select * from tempdb.dbo.sysobjects where id =
::::::: object_id(N'tempdb..#MaxStatus')) BEGIN
:::::::  DROP TABLE #MaxStatus
::::::: END
::::::: IF EXISTS (select * from tempdb.dbo.sysobjects where id =
::::::: object_id(N'tempdb..#HelpDeskCallDetails')) BEGIN
:::::::  DROP TABLE #HelpDeskCallDetails
::::::: END
:::::::
::::::: SET NOCOUNT OFF
:::::::
:::::::
::::::: -Francisco
::::::: http://rcm.netfirms.com
::
::
:: _______________________________________________
:: dba-SQLServer mailing list
:: dba-SQLServer at databaseadvisors.com
:: http://databaseadvisors.com/mailman/listinfo/dba-sqlserver
:: http://www.databaseadvisors.com
::
:
: _________________________________________________________________
: The new MSN 8: smart spam protection and 2 months FREE*
: http://join.msn.com/?page=features/junkmail
:
: _______________________________________________
: 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