![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Hi everyone: Using Sql Server SQL 8 I'm trying to INSERT records into a "can software package" batch table. I have a work-table that mimics the batch table. After manipulating the records in the work-file I want to INSERT them into the batch table. The problem is the batch table in the can software has a trigger on the batch table which is going to force me to INSERT one record at a time. I've always been able to do an INSERT with no problem. The batch table has pretty basic columns: BatchID BatchDate SeqNumber These three fields are the key and then just some miscellaneous columns. Any easy way to loop thru my work-file to insert these records. Never done a loop in SQL so an example would be really really appreciated. I have a sequence number so I was hoping to do a While loop but I really don't know enough about creating a loop to make that call. Thanks in advance for any help. |
#3
| |||
| |||
|
|
Using Sql Server SQL 8 I'm trying to INSERT records into a "can software package" batch table. I have a work-table that mimics the batch table. After manipulating the records in the work-file I want to INSERT them into the batch table. The problem is the batch table in the can software has a trigger on the batch table which is going to force me to INSERT one record at a time. I've always been able to do an INSERT with no problem. |
|
The batch table has pretty basic columns: BatchID BatchDate SeqNumber These three fields are the key and then just some miscellaneous columns. Any easy way to loop thru my work-file to insert these records. Never done a loop in SQL so an example would be really really appreciated. I have a sequence number so I was hoping to do a While loop but I really don't know enough about creating a loop to make that call. Thanks in advance for any help. |
#4
| |||
| |||
|
|
eighthman11 (rdshu... (AT) nooter (DOT) com) writes: Using Sql Server SQL 8 I'm trying toINSERTrecords into a "can software package" batch table. I have a work-table that mimics the batch table. After manipulating the records in the work-file I want toINSERTthem into the batch table. The problem is the batch table in the can software has a trigger on the batch table which is going to force me toINSERTone record at a time. I've always been able to do anINSERTwith no problem. Ouch! Apparently someone did not know how to write a set-based trigger. The batch table has pretty basic columns: BatchID BatchDate SeqNumber These three fields are the key and then just some miscellaneous columns. Any easy way to loop thru my work-file toinsertthese records. Never done a loop in SQL so an example would be really really appreciated. I have a sequence number so I was hoping to do a While loop but I really don't know enough about creating a loop to make that call. Thanks in advance for any help. They say cursors are evil, and that's true: iterative solutions are almost always magnitudes slower than set-based. But when you need to iterate, cursors is usually the best solution. DECLARE @batchid int, @batchdate datetime, @seqnumber int, .... DECLARE cur CURSOR STATIC LOCAL FOR SELECT batchid, batchdate, seqnumer, .... FROM yourworktable -- ORDER BY if you like OPEN cur WHILE 1 = 1 BEGIN FETCH cur INTO @batchid, @batchdate, @seqnumer, ... IF @@fetch_status <> 0 BREAK INSERTtargettable (...) VALUES (....) END DEALLOCATE cur Notes: DECLARE CURSOR - creates the cursor. STATIC - the result set for the cursor is defined once for all into tempdb. LOCAL - Cursor is visible in current scope only. OPEN - Opens the cursor. FETCH - get next from the cursor. @@fetch_status - 0 as long as there are more rows in the pipeline. DEALLOCATE - deletes the cursor. -- Erland Sommarskog, SQL Server MVP, esq... (AT) sommarskog (DOT) se Books Online for SQL Server 2005 athttp://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books... Books Online for SQL Server 2000 athttp://www.microsoft.com/sql/prodinfo/previousversions/books.mspx |
#5
| |||
| |||
|
|
I would like to thank everyone for their response. I tried both examples I was given and both worked great. Right now I am in testing and I am only using a handful of records. Later on when I am inserting hundreds or thousands of records I will try both ways again to see which processes faster. Once again I really appreciate the help. |
#6
| |||
| |||
|
|
eighthman11 (rdshu... (AT) nooter (DOT) com) writes: I would like to thank everyone for their response. I tried both examples I was given and both worked great. Right now I am in testing and I am only using a handful of records. Later on when I am inserting hundreds or thousands of records I will try both ways again to see which processes faster. Once again I really appreciate the help. Hundreds of thousands? I'm afraid that you will find both methods painfully slow. With that size I would be prepared to look into do modify the trigger, despite that it would void any warranties. -- Erland Sommarskog, SQL Server MVP, esq... (AT) sommarskog (DOT) se Books Online for SQL Server 2005 athttp://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books... Books Online for SQL Server 2000 athttp://www.microsoft.com/sql/prodinfo/previousversions/books.mspx |
#7
| |||
| |||
|
|
Sorry for the confustion. It isn't hundreds of thousands. It would be hundreds OR thousands of records. In actuality I can't imagine there ever being more than 3 thousand records. |
![]() |
| Thread Tools | |
| Display Modes | |
| |