primary key in stored procedure temp table question

Posted on 2008-10-02
Last Modified: 2008-10-13

I use primary key in my temp tables since they hold many rows and I wanted to speed up the performance.  Many of these stored procedures uses open query.  These store proc are fired via scheduled DTS.  The trouble is that they sometimes fail (I don't know why, maybe timeout issues), and the temp tables gets orphaned in tempdb.  The temp tables have unique names w/in tempdb, but not the indexes.  The next time the same sp runs, the pk name is already taken and the sp will fail every scheduled run thereafter.  I could not figure out why the sp fails.  Is there a way the temp table can have unique index names so that if the temp tables gets orphaned, it would not prevent the same sp from running again?  

Unfortunately, the only way I can remove the orphaned temp tables is to restart the sql server.

Question by:skip1000
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
  • +1

Expert Comment

ID: 22630767
Are you referencing these temp tables only within that given code block in the SP?

Author Comment

ID: 22631025

Accepted Solution

randy_knight earned 400 total points
ID: 22631259
Not sure why your temp tables are not being dropped.  The temp table are created with # prefix, not ##?  Or hard tables?  By this I mean you can create a permanent table in tempdb just like any other database.  The difference being it will go away when the instance i restarted.  

In any case, to answer your index name question, one solution would be to use dynamic sql to generate a unique index name using NEWID().  Use the REPLACE() function to strip out the - and append it to your index name.

declare @Indexname varchar(50)
set @indexname = 'ix_' + replace(newid(),'-','')
print @indexname

use the @indexname in dynamic sql to create your index.

Get MongoDB database support online, now!

At Percona’s web store you can order your MongoDB database support needs in minutes. No hassles, no fuss, just pick and click. Pay online with a credit card. Handle your MongoDB database support now!


Expert Comment

ID: 22632071
Hi Skip,

I was wondering why your creating such big temp tables? Could you achieve your objective by using indexed views ???

Whats going in/out of these temp tables ???

Could you supply an example of your SP ?

Author Comment

ID: 22632119
bc it is openquery, it is not possible to join rows in mssql to mysql.  for me to be aware of any changes, i would have to take all row (selected fields) from mysql and bring it to mssql b4 i can make any comparison.  these tables in mysql can contain almost 2million rows, therefore, indexing would help w/ processing the info from temp tables.  if u know of a way to compare lots of data (hundreds of thousands of row) from 2 different environment (mysql and ms sql), then you would've indirectly solve my problem.:)

Expert Comment

ID: 22632159
Hows your knowledge of linked servers???

Here is a link that decribes setting up mySQL as a linked server. It might take a bit of time and patients to get it working, but I think this will create a manageable and scalable solution to your problem.

The MSSQL <=> MYSQL marriage is a common industry topic so you should be able to find lots of info out there.

Hope this message has been of help.


Author Comment

ID: 22632202
i doubt there is a solution for that other than the way I'm doing it.  I posted a question here ages ago and it went unanswered for the longest time.  i think i finally had to just close it.  maybe it was deleted since i can't find any record of that question now.

Author Comment

ID: 22674552
hi randy_knight,

I tried to create the temp table dynamically, except it disappears as soon as it is created.  seems like the temp table only exist w/in session of the dynamic sql, eg. exec(@sql).  I guess in the worst case, i might have to resort to using permanent tables that get reused each time.

Expert Comment

ID: 22675433
Nothing wrong with permanent tables that you create/drop each time.  And put them in tempdb so if they get orphaned they will get dropped on the next SQL Sevice restart.


Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Slowly Changing Dimension Transformation component in data task flow is very useful for us to manage and control how data changes in SSIS.
Ever wondered why sometimes your SQL Server is slow or unresponsive with connections spiking up but by the time you go in, all is well? The following article will show you how to install and configure a SQL job that will send you email alerts includ…
Via a live example, show how to shrink a transaction log file down to a reasonable size.
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

626 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question