Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

primary key in stored procedure temp table question

Posted on 2008-10-02
9
Medium Priority
?
936 Views
Last Modified: 2008-10-13
Hi,

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.

Thx.
0
Comment
Question by:skip1000
  • 4
  • 2
  • 2
  • +1
9 Comments
 
LVL 3

Expert Comment

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

Author Comment

by:skip1000
ID: 22631025
yes
0
 
LVL 4

Accepted Solution

by:
randy_knight earned 1600 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.


0
NEW Veeam Backup for Microsoft Office 365 1.5

With Office 365, it’s your data and your responsibility to protect it. NEW Veeam Backup for Microsoft Office 365 eliminates the risk of losing access to your Office 365 data.

 
LVL 1

Expert Comment

by:sqlconsumer
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 ?
0
 

Author Comment

by:skip1000
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.:)
0
 
LVL 1

Expert Comment

by:sqlconsumer
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.

http://www.sqlservercentral.com/Forums/Topic340912-146-1.aspx

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.

sqlconsumer.
0
 

Author Comment

by:skip1000
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.
0
 

Author Comment

by:skip1000
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.
0
 
LVL 4

Expert Comment

by:randy_knight
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.


0

Featured Post

NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

Question has a verified solution.

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

For both online and offline retail, the cross-channel business is the most recent pattern in the B2C trade space.
This month, Experts Exchange sat down with resident SQL expert, Jim Horn, for an in-depth look into the makings of a successful career in SQL.
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed
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…

972 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