When you think ASP, think...
Recent Articles
All Articles
ASP.NET Articles [1.x] [2.0]
ASPFAQs.com
Message Board
Related Web Technologies
User Tips!
Coding Tips
Search

Sections:
Book Reviews
Sample Chapters
Commonly Asked Message Board Questions
Headlines from ASPWire.com
JavaScript Tutorials
MSDN Communities Hub
Official Docs
Security
Stump the SQL Guru!
Web Hosts
XML Info
Information:
Advertise
Feedback
Author an Article
Technology Jobs

















internet.com
IT
Developer
Internet News
Small Business
Personal Technology
International

Search internet.com
Advertise
Corporate Info
Newsletters
Tech Jobs
E-mail Offers
ASP ASP.NET ASP FAQs Message Board Feedback ASP Jobs
Print this page.

Windows Systems Administrator
Jupitermedia
US-CT-Darien

Justtechjobs.com Post A Job | Post A Resume

The SQL Guru Answers your Questions...


Today's question comes from Fedirico:

I am quite new in SQL, and I wanted to know how to perform a cascading delete. I know that I have to use triggers, but I donīt have any idea of how to write them. Also, any book recommendations?

Hi Fedirico,

As you say, triggers are the best way to go to perform cascading deletes. Due to their proximity to the actual data, they are extremely efficient but also have a number of other advantages, namely:

  • A user cannot update your tables without causing the trigger to fire
  • In the event that an error occurs during trigger execution, the original transaction is rolled back, leaving your data in a state that is known to be correct.

So let's see how to perform this cascading delete. Let us assume that you have a stock table which contains a list of items a shop stocks and sells, as well as a stock transaction table which contains a list of purchases and sales for each stock item. We wish to implement a routine which ensures that whenever a stock item is deleted, all the related transaction items are deleted also.

The code for the trigger would look something like this:

CREATE TRIGGER stock_cascade_delete
ON Stock
FOR DELETE
AS
	DECLARE	@StockCodeToDelete int
	SELECT	@StockCodeToDelete = Stock_Code
	FROM	Deleted

	DELETE FROM Stock_Transactions
	WHERE  Stock_Code = @StockCodeToDelete

Keep in mind that we refer to the deleted row(s) using the Deleted table.

Now, I wish to point out one area which can be a source of potential bugs unless you keep this fact in mind. A trigger only fires ONCE per statement.

What do I mean by this? The trigger above will work fine as long as only one row is deleted from the Stock table. It will figure out which Stock_Code it must clear and delete all related records from the Stock_Transaction table. However, what happens if the user executes a DELETE statement which deletes more than one record? The trigger will only remove related records for ONE of the deleted records, leaving the other records there and wrecking the integrity of your data.

With this in mind, let's rewrite the trigger

CREATE TRIGGER stock_cascade_delete
ON Stock
FOR DELETE
AS

	DELETE FROM Stock_Transactions
	WHERE  Stock_Code IN (  SELECT Stock_Code
	                        FROM deleted )

This will handle single record deletes as well as multiple record deletes.

So, a couple of points I would like to summarize:

    1. Triggers are the best way to implement cascading deletes and updates
    2. A trigger will roll back the change you made to the data if an error occurs within it
    3. A trigger is executed ONCE per statement.
    4. We refer to the deleted rows using the deleted table (and new rows with the inserted table)

Keeping these points in mind, writing a trigger is very similar to writing a stored procedure, except that your code will not be called explicitly, but execute whenever a change is made to a table in the database.

With respect to you question about books, the best source of information are the Books Online (BOL) which ship with SQL. If you find them a bit dry, you might want to have a look at my booklist at http://www.only-network.com/books. I'm sure you'll find something you'll find interesting. Happy Programming!

Owen


Read Other SQL Guru Questions


Windows Internet Technology | ASP.NET [1.x] [2.0] | ASPMessageboard.com | ASPFAQs.com | Advertise | Feedback | Author an Article



JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

Solutions
Whitepapers and eBooks
Microsoft Article: Will Hyper-V Make VMware This Decade's Netscape?
Microsoft Article: 7.0, Microsoft's Lucky Version?
Microsoft Article: Hyper-V--The Killer Feature in Windows Server 2008
Avaya Article: How to Feed Data into the Avaya Event Processor
Microsoft Article: Install What You Need with Windows Server 2008
HP eBook: Putting the Green into IT
Whitepaper: HP Integrated Citrix XenServer for HP ProLiant Servers
Intel Go Parallel Portal: Interview with C++ Guru Herb Sutter, Part 1
Intel Go Parallel Portal: Interview with C++ Guru Herb Sutter, Part 2--The Future of Concurrency
Avaya Article: Setting Up a SIP A/S Development Environment
IBM Article: How Cool Is Your Data Center?
Microsoft Article: Managing Virtual Machines with Microsoft System Center
HP eBook: Storage Networking , Part 1
Microsoft Article: Solving Data Center Complexity with Microsoft System Center Configuration Manager 2007
MORE WHITEPAPERS, EBOOKS, AND ARTICLES
Webcasts
Intel Video: Are Multi-core Processors Here to Stay?
On-Demand Webcast: Five Virtualization Trends to Watch
HP Video: Page Cost Calculator
Intel Video: APIs for Parallel Programming
HP Webcast: Storage Is Changing Fast - Be Ready or Be Left Behind
Microsoft Silverlight Video: Creating Fading Controls with Expression Design and Expression Blend 2
MORE WEBCASTS, PODCASTS, AND VIDEOS
Downloads and eKits
Sun Download: Solaris 8 Migration Assistant
Sybase Download: SQL Anywhere Developer Edition
Red Gate Download: SQL Backup Pro and free DBA Best Practices eBook
Red Gate Download: SQL Compare Pro 6
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
How-to-Article: Preparing for Hyper-Threading Technology and Dual Core Technology
eTouch PDF: Conquering the Tyranny of E-Mail and Word Processors
IBM Article: Collaborating in the High-Performance Workplace
HP Demo: StorageWorks EVA4400
Intel Featured Algorhythm: Intel Threading Building Blocks--The Pipeline Class
Microsoft How-to Article: Get Going with Silverlight and Windows Live
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES