Solved

T-SQL: trigger instead of delete doesn't work when i run a bulk delete operation

Posted on 2008-10-21
3
785 Views
Last Modified: 2012-08-14
I have created a trigger for 'instead of delete' that gets some data from two tables, inserts part of the deleted row in a log table and then deletes the row. The trigger works when i manually delete a row from the table, the problem is that if i run a query to delete multiple rows then it only works for the last row to be deleted. So if a query is supposed to delete 5 rows and do all the operations in the trigger for each one of them, it only does it for the last one. My guess is that it's trying to run the following trigger before it is finished with the first and that is creating a problem, any ideas? code attached below.



ALTER TRIGGER trigger1

   ON TABLE1

   INSTEAD OF DELETE

AS 

BEGIN

	-- SET NOCOUNT ON added to prevent extra result sets from

	-- interfering with SELECT statements.

	SET NOCOUNT ON;

	

	DECLARE @var1		varchar(20)

	DECLARE @var2		datetime

	DECLARE @var3		datetime

	DECLARE @var4	        datetime

	DECLARE @var5		TINYINT

	DECLARE @var6		VARCHAR(10)

	

	SET @var2 = getDate()
 

	SELECT @var1 = uid, @var3 = var3, @var4 = var4, @var5 = var5 FROM DELETED	

	

	IF @var3 < 1 BEGIN 

		INSERT INTO TABLE2 (var1, var2, var3, var4, var5) 

			VALUES (@var1, @var2, @var3, @var4, @var5)

	END

	

	DELETE FROM TABLE1 WHERE uid = @var1

END

Open in new window

0
Comment
Question by:LDIT
  • 2
3 Comments
 
LVL 32

Accepted Solution

by:
Daniel Wilson earned 250 total points
ID: 22766898
A trigger fires for each transaction, not for each row.  Your trigger assumes there's only a single row.

Try this:

ALTER TRIGGER trigger1

   ON TABLE1

   INSTEAD OF DELETE

AS 

BEGIN

  INSERT INTO TABLE2 (var1, var2, var3, var4, var5)

    (Select uid, getdate(), var3, var4, var5 from DELETED Where var3 < 1)
 

  Delete From Table1

   From Table1 Inner Join Deleted on Table1.uid = deleted.uid

END

Open in new window

0
 

Author Closing Comment

by:LDIT
ID: 31508239
Cool, i thought the deleted was not a table, but rather a row. So this means the deleted table holds all the deleted rows for the transaction? Thanks for the solution!
0
 
LVL 32

Expert Comment

by:Daniel Wilson
ID: 22768187
DELETED and INSERTED are tables ... well, not real tables, but they look like tables when within a trigger.  I'm not sure of the technical term applied.

The assumption that they have only a single record is a common trigger problem.    (Yes, I've done it too ...)

All that is within MS SQL Server ... MySQL has significantly different syntax in that area, and I'm not sure exactly what it's doing there.

Glad to help!
0

Featured Post

Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

Question has a verified solution.

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

When writing XML code a very difficult part is when we like to remove all the elements or attributes from the XML that have no data. I would like to share a set of recursive MSSQL stored procedures that I have made to remove those elements from …
In this article I will describe the Copy Database Wizard method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…

896 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now