|  | Posted by Erland Sommarskog on 05/02/07 21:36 
eighthman11 (rdshultz@nooter.com) writes:> 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.
 
 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 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.
 
 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
 
 INSERT targettable (...)
 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, esquel@sommarskog.se
 
 Books Online for SQL Server 2005 at
 http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
 Books Online for SQL Server 2000 at
 http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx
  Navigation: [Reply to this message] |