Roman Rehak

SQL Server and things not related

<August 2008>
SuMoTuWeThFrSa
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456


Navigation

SQL Server Sites

Subscriptions

News

eXTReMe Tracker

Post Categories



Roman's Weekly SQL Server Tip - How to quickly delete all data in the database

This tip comes from my latest project. If you run into a scenario where you need to delete all of the data in your database, you can do it easily with just two lines of code using the MSForEachTable stored procedure. The trick here is to first disable referential integrity checks so you can delete data from parent tables. If you have a lot of data, you may want to rewrite the delete part and turn it into a batch delete, in my experience 100,000 rows is a reasonable chunk to delete in one shot. Here is the code:

-- disable referential integrity
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO

EXEC sp_MSForEachTable 'DELETE FROM ?'
GO

-- enable referential integrity again
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO

posted on Friday, March 03, 2006 10:19 AM by Roman


# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, March 03, 2006 11:41 AM

Very nice Roman. Thanks for sharing!

The Ji Village News

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, March 03, 2006 2:20 PM

Thats some nifty code.

But isn't a TRUNCATE TABLE faster? I don't know for sure but I tink its a lot faster.

Tom Pester

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, March 03, 2006 3:00 PM

You're right, TRUNCATE TABLE is faster and more efficient. But, you can't use it on a table that's referenced by a foreign key unless you drop the FK first on the child table.

Roman

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, March 06, 2006 11:36 AM

More efficent would be using TRUNCATE TABLE instead of the DELETE FROM and or batch Delete assuming you have the necessary permissions on the DB.
Truncate also has the side effect of reseting the identity columns.

Anonymous

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, March 06, 2006 2:57 PM

Worked amazingly well in my DTS package. A lot shorter than truncated each table.

tellier

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, March 06, 2006 3:02 PM

Best of both worlds...
-- disable referential integrity
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO

EXEC sp_MSForEachTable 'TRUNCATE TABLE ?'
GO

-- enable referential integrity again
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO

tellier

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, March 07, 2006 10:03 PM

Or you can be lazy like me and run the delete in a loop until you don't get any FK errors anymore :)

Adam Machanic

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, March 07, 2006 11:17 PM

Adam,

I can't believe you're confessing something like that!!!

Roman

# Roman's Weekly SQL Server Tip - How to quickly delete all data in the database, version 2 @ Wednesday, March 08, 2006 12:20 PM

My tip from last week about deleting all data in the database easily seems to have generated a lot of...

Anonymous

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, March 29, 2006 5:19 PM

Why do I still get a referential integrity error when I try to run this?

Roger

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, April 12, 2006 9:43 PM

Roger,

not sure why that happens, this script worked for me in over 30 different databases. Can you try running ALTER TABLE explicitly on the table that's giving you the error?

Roman

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, May 10, 2006 6:57 PM

Roman - I also can't get the (nice, clean, simple) technique of NOCHECK/DELETE/CHECK to work. This is on a default instance of Sql Server 2000 with SP3a. The failure is totally reproducible - create the two tables in the script below and then try your three stored procs.
==========================================
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Tchild_Tparent]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Tchild] DROP CONSTRAINT FK_Tchild_Tparent
GO

/****** Object: Table [dbo].[Tchild] Script Date: 5/10/2006 16:53:43 ******/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Tchild]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Tchild]
GO

/****** Object: Table [dbo].[Tparent] Script Date: 5/10/2006 16:53:43 ******/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Tparent]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Tparent]
GO

/****** Object: Table [dbo].[Tparent] Script Date: 5/10/2006 16:53:43 ******/
CREATE TABLE [dbo].[Tparent] (
[pk] [int] IDENTITY (1, 1) NOT NULL ,
[data] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO

/****** Object: Table [dbo].[Tchild] Script Date: 5/10/2006 16:53:44 ******/
CREATE TABLE [dbo].[Tchild] (
[pk] [int] IDENTITY (1, 1) NOT NULL ,
[fk_Tparent] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Tparent] ADD
CONSTRAINT [PK_Tparent] PRIMARY KEY CLUSTERED
(
[pk]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Tchild] ADD
CONSTRAINT [PK_Tchild] PRIMARY KEY CLUSTERED
(
[pk]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Tchild] ADD
CONSTRAINT [FK_Tchild_Tparent] FOREIGN KEY
(
[fk_Tparent]
) REFERENCES [dbo].[Tparent] (
[pk]
)
GO

Steven Colby

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, July 16, 2007 12:10 PM

Note that you may also need
EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ?'
to disable any triggers stopping you from deleting data.

Michelle Taylor

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 07, 2007 8:53 AM

Cool.

Gondikas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 07, 2007 9:06 AM

Cool.

Aiakos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 07, 2007 12:49 PM

Nice

Kharilaos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 07, 2007 5:24 PM

Nice

Nick

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 07, 2007 9:42 PM

interesting

Polyvios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 07, 2007 10:38 PM

Sorry :(

Kleanthe

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 08, 2007 1:17 AM

Interesting...

Solon

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 08, 2007 2:11 AM

Nice!

Sergios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 08, 2007 3:24 PM

Nice

Pavlos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 08, 2007 4:01 PM

Cool...

Ioannis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, September 09, 2007 8:50 AM

Nice...

Konstantinos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, September 09, 2007 9:45 AM

Cool!

Theodosios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 10, 2007 4:30 PM

Nice!

Christodoulos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 10, 2007 6:11 PM

Cool...

Tassos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, September 11, 2007 3:37 AM

Nice!

Leonidas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, September 11, 2007 12:39 PM

Cool...

Constandinos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 12, 2007 3:54 AM

interesting

Ignatios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 12, 2007 6:25 AM

Cool.

Ambrosios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 12, 2007 11:47 AM

interesting

Doxiadis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, September 13, 2007 6:03 AM

Sorry :(

Rhigas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, September 13, 2007 12:09 PM

Nice...

Panayotis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, September 13, 2007 5:16 PM

Nice...

Achilles

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 14, 2007 2:55 AM

Cool!

Prokopios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 14, 2007 3:00 AM

Cool.

Nektarios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 14, 2007 5:21 AM

Interesting...

Panayiotis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 14, 2007 2:58 PM

Cool!

Marko

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 14, 2007 5:40 PM

Nice...

Aleda

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 15, 2007 6:43 AM

Sorry :(

Rhigas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 15, 2007 3:44 PM

Nice...

Kostas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 15, 2007 6:12 PM

Sorry :(

Marinos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 15, 2007 7:12 PM

interesting

Alexiou

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, September 16, 2007 10:11 AM

Cool...

Yiannis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, September 16, 2007 1:09 PM

Nice

Dionysios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, September 16, 2007 6:08 PM

Cool.

Giorgos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, September 16, 2007 8:49 PM

Nice...

Marko

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 17, 2007 1:33 AM

Nice

Demetrios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 17, 2007 6:45 AM

Nice...

Loukianos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 17, 2007 10:01 AM

Nice...

Polyvios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 17, 2007 7:03 PM

Interesting...

Athones

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, September 18, 2007 2:36 AM

Sorry :(

Kypros

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, September 18, 2007 12:27 PM

Interesting...

Kosmas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, September 18, 2007 2:54 PM

Nice!

Georgios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 19, 2007 4:27 AM

Sorry :(

Sotiris

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 19, 2007 12:05 PM

Cool!

Hristos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 19, 2007 7:59 PM

Cool.

Vasilis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, September 20, 2007 3:15 AM

Interesting...

Charalampos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, September 20, 2007 2:44 PM

Cool...

Iakovos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, September 20, 2007 6:26 PM

interesting

Adonis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, September 20, 2007 7:15 PM

Cool...

Miltos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 21, 2007 4:12 AM

Sorry :(

Andreas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 21, 2007 4:41 AM

Nice

Ivan

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 21, 2007 11:07 AM

Cool...

Evagelos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 21, 2007 6:31 PM

Cool...

Aristotelis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, September 21, 2007 11:40 PM

interesting

Ilias

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 22, 2007 5:19 AM

Nice!

Ivan

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 22, 2007 11:55 AM

Cool...

Apostolis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 22, 2007 5:19 PM

Sorry :(

Andonios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, September 22, 2007 6:50 PM

Sorry :(

Theodoros

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, September 23, 2007 12:13 AM

interesting

Silvanos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, September 23, 2007 8:53 PM

interesting

Gustas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, September 23, 2007 9:54 PM

Sorry :(

Athones

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 24, 2007 1:33 PM

Cool!

Lefteris

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 24, 2007 1:39 PM

Nice

Ivan

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 24, 2007 8:45 PM

Cool!

Ari

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, September 24, 2007 11:13 PM

Cool!

Nickolas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, September 25, 2007 12:37 PM

interesting

Leontios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, September 25, 2007 2:49 PM

Nice...

Yiannos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 26, 2007 9:34 AM

Nice!

Mamadshah

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 26, 2007 3:47 PM

Cool!

Hristos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 26, 2007 7:45 PM

interesting

Photios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, September 26, 2007 11:15 PM

Sorry :(

Kristion

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, September 27, 2007 2:28 AM

Nice

Augustinos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, September 27, 2007 5:17 AM

Cool...

Alexis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, October 16, 2007 4:05 PM

Cool...

Lambros

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, October 17, 2007 8:21 AM

Nice!

Theologos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, October 18, 2007 10:30 AM

Nice!

Angelo

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, October 18, 2007 8:16 PM

Interesting...

Matthaios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, October 20, 2007 12:12 AM

Cool!

Alexiou

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, October 20, 2007 3:05 PM

interesting

Alexandros

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, November 01, 2007 11:06 AM

Cool.

Nico

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, November 01, 2007 6:17 PM

Cool...

Fanos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, November 01, 2007 8:19 PM

Cool!

Vaggelis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, November 01, 2007 8:34 PM

Nice...

Achilleas

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, November 01, 2007 11:08 PM

Cool...

Athanasios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, November 02, 2007 7:18 AM

Cool.

Aris

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, November 02, 2007 12:06 PM

Cool!

Petros

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, November 02, 2007 5:03 PM

Interesting...

Romanos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Friday, November 02, 2007 7:14 PM

Cool...

Ari

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Saturday, November 03, 2007 3:46 AM

interesting

Romanos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, November 04, 2007 6:42 PM

Nice

Bikos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, November 04, 2007 10:18 PM

Interesting...

Vasileios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Sunday, November 04, 2007 11:10 PM

Cool!

Panayiotis

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, November 05, 2007 2:59 AM

Interesting...

Efstathios

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, November 05, 2007 5:15 AM

Cool.

Bikos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, November 05, 2007 5:31 AM

interesting

Solon

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, November 05, 2007 11:51 AM

Nice!

Panos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Monday, November 05, 2007 6:32 PM

Cool.

Zeus

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, November 06, 2007 10:27 AM

Sorry :(

Chrysostomos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, November 06, 2007 11:10 PM

interesting

Bikos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Wednesday, November 07, 2007 11:51 AM

Nice

Lazaros

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, November 08, 2007 12:28 AM

Cool!

Emmanuil

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, November 08, 2007 10:43 AM

Cool...

Aiolos

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, November 08, 2007 11:17 AM

Sorry :(

Ari

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, December 13, 2007 7:30 AM

Why dont you truncate and delete with this technique?

http://sqlblogcasts.com/blogs/madhivanan/archive/2007/08/27/truncate-all-tables-part-ii.aspx

Madhivanan

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Thursday, March 27, 2008 2:32 AM

Hi Roman,
This script was very useful to us .
Thanks.

Rakesh and Sweta

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, April 15, 2008 2:37 AM

This has become easier with SQL 2005:
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
GO

EXEC sp_MSForEachTable
'BEGIN TRY
TRUNCATE TABLE ?
END TRY
BEGIN CATCH
DELETE FROM ?
END CATCH;'

EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
GO

Mark Varghese

# re: Roman's Weekly SQL Server Tip - How to quickly delete all data in the database @ Tuesday, June 10, 2008 4:36 PM

Very nice from Roman to Mark Varghese