You are here: Re: INSERT - one record at a time « MsSQL Server « IT news, forums, messages
Re: INSERT - one record at a time

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]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация