<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>[T-SQL] Drop all constraints on a table</title><link>http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx</link><description>Here's a simple scriptlet I've included in database upgrade scripts to drop all constraints on a table which will then allow dropping the table. Of course, you'll want to replace the @database and @table parameters. This doesn't take care of circumstances</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>re: [T-SQL] Drop all constraints on a table</title><link>http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx#7274795</link><pubDate>Wed, 09 Dec 2009 19:41:45 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7274795</guid><dc:creator>Foobar Explitive</dc:creator><author>Foobar Explitive</author><description>&lt;p&gt;This worked better for me. &amp;nbsp;SQL 2008:&lt;/p&gt;
&lt;p&gt;if object_id('dbo.sp_ClearConstraints') is null &lt;/p&gt;
&lt;p&gt; &amp;nbsp; exec ('Create proc dbo.sp_ClearConstraints as begin print '''' end') &lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;p&gt;go &amp;nbsp; &lt;/p&gt;
&lt;p&gt;ALTER PROCEDURE dbo.sp_ClearConstraints&lt;/p&gt;
&lt;p&gt;	@DatabaseName varchar(50)&lt;/p&gt;
&lt;p&gt;AS&lt;/p&gt;
&lt;p&gt;BEGIN&lt;/p&gt;
&lt;p&gt;	DECLARE @TableName sysname&lt;/p&gt;
&lt;p&gt;	DECLARE @ConstraintName sysname&lt;/p&gt;
&lt;p&gt;	DECLARE @FKTableName as sysname&lt;/p&gt;
&lt;p&gt;	DECLARE @FKName as sysname&lt;/p&gt;
&lt;p&gt;	DECLARE @Schema as sysname&lt;/p&gt;
&lt;p&gt;	DECLARE @ConstraintType as sysname&lt;/p&gt;
&lt;p&gt;	DECLARE @SQL varchar(2000)&lt;/p&gt;
&lt;p&gt;	DECLARE Constraints CURSOR FOR&lt;/p&gt;
&lt;p&gt;		with KeyInfo as (&lt;/p&gt;
&lt;p&gt;			select Tablename = OBJECT_NAME(kc.parent_object_id), KeyName = kc.name, TableSchema = SCHEMA_NAME(so.schema_id), [type] = kc.type, [order] = 999&lt;/p&gt;
&lt;p&gt;			from sys.key_constraints &amp;nbsp;kc&lt;/p&gt;
&lt;p&gt;			join sys.objects so on kc.parent_object_id = so.[object_id] &lt;/p&gt;
&lt;p&gt;			union&lt;/p&gt;
&lt;p&gt;			select OBJECT_NAME(kc.parent_object_id), kc.name, SCHEMA_NAME(so.schema_id), 'FK', [order] = 0&lt;/p&gt;
&lt;p&gt;			from &amp;nbsp; sys.foreign_keys kc&lt;/p&gt;
&lt;p&gt;			join sys.objects so on kc.parent_object_id = so.[object_id] &lt;/p&gt;
&lt;p&gt;	 &amp;nbsp; &amp;nbsp;)			&lt;/p&gt;
&lt;p&gt;	 &amp;nbsp; &amp;nbsp;select TableName, KeyName, TableSchema, [Type]&lt;/p&gt;
&lt;p&gt;	 &amp;nbsp; &amp;nbsp;from &amp;nbsp; keyinfo&lt;/p&gt;
&lt;p&gt;		order by [order]&lt;/p&gt;
&lt;p&gt;	OPEN Constraints&lt;/p&gt;
&lt;p&gt;	FETCH NEXT FROM Constraints INTO @TableName, @ConstraintName, @Schema, @ConstraintType&lt;/p&gt;
&lt;p&gt;	WHILE @@FETCH_STATUS = 0&lt;/p&gt;
&lt;p&gt;	BEGIN&lt;/p&gt;
&lt;p&gt;		IF @ConstraintType = 'FK'&lt;/p&gt;
&lt;p&gt;		BEGIN&lt;/p&gt;
&lt;p&gt;			SET @SQL = 'USE ' + @DatabaseName + ' ALTER TABLE [' + @Schema + '].[' + @TableName + '] DROP CONSTRAINT [' + @ConstraintName + ']'&lt;/p&gt;
&lt;p&gt;			PRINT @SQL&lt;/p&gt;
&lt;p&gt;			EXEC (@SQL)&lt;/p&gt;
&lt;p&gt;		END&lt;/p&gt;
&lt;p&gt;		ELSE --Else if there are no foreign key constraints on the table&lt;/p&gt;
&lt;p&gt;		BEGIN&lt;/p&gt;
&lt;p&gt;			SET @SQL = 'USE ' + @DatabaseName + ' ALTER TABLE [' + @Schema + '].[' + @TableName + '] DROP CONSTRAINT [' + @ConstraintName + ']'&lt;/p&gt;
&lt;p&gt;			PRINT @SQL&lt;/p&gt;
&lt;p&gt;			EXEC (@SQL)&lt;/p&gt;
&lt;p&gt;		END&lt;/p&gt;
&lt;p&gt;		FETCH NEXT FROM Constraints INTO @TableName, @ConstraintName, @Schema, @ConstraintType&lt;/p&gt;
&lt;p&gt;	END&lt;/p&gt;
&lt;p&gt;	CLOSE &amp;nbsp; &amp;nbsp; &amp;nbsp;Constraints&lt;/p&gt;
&lt;p&gt;	DEALLOCATE Constraints&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;p&gt;SET QUOTED_IDENTIFIER OFF&lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;p&gt;SET ANSI_NULLS ON&lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7274795" width="1" height="1"&gt;</description></item><item><title>SQL Quicklinks - sashidhar.com</title><link>http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx#6815175</link><pubDate>Fri, 02 Jan 2009 21:31:59 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6815175</guid><dc:creator>SQL Quicklinks - sashidhar.com</dc:creator><author>SQL Quicklinks - sashidhar.com</author><description>&lt;p&gt;Pingback from &amp;nbsp;SQL Quicklinks - sashidhar.com&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6815175" width="1" height="1"&gt;</description></item><item><title>re: [T-SQL] Drop all constraints on a table</title><link>http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx#6421212</link><pubDate>Sat, 19 Jul 2008 17:02:48 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6421212</guid><dc:creator>Adam  Turner</dc:creator><author>Adam  Turner</author><description>&lt;p&gt;Sorry didn't realize it didn't work with FK constraints...so here's the full code that will drop FK constraints and the tables and make sure you're not running on the production server:&lt;/p&gt;
&lt;p&gt;SET QUOTED_IDENTIFIER ON &lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;p&gt;SET ANSI_NULLS ON &lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;p&gt;ALTER PROCEDURE usp_ClearConstraints&lt;/p&gt;
&lt;p&gt;	@DatabaseName varchar(50)&lt;/p&gt;
&lt;p&gt;AS&lt;/p&gt;
&lt;p&gt;IF @@ServerName &amp;lt;&amp;gt; 'YourProductionServer'&lt;/p&gt;
&lt;p&gt;BEGIN&lt;/p&gt;
&lt;p&gt;DECLARE @TableName NVARCHAR(50)&lt;/p&gt;
&lt;p&gt;DECLARE @ConstraintName NVARCHAR(50)&lt;/p&gt;
&lt;p&gt;DECLARE Constraints CURSOR FOR&lt;/p&gt;
&lt;p&gt; SELECT TABLE_NAME, CONSTRAINT_NAME &lt;/p&gt;
&lt;p&gt;	FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE u&lt;/p&gt;
&lt;p&gt; JOIN SYSOBJECTS s&lt;/p&gt;
&lt;p&gt;	ON u.TABLE_NAME = s.Name&lt;/p&gt;
&lt;p&gt; WHERE TABLE_CATALOG = @DatabaseName&lt;/p&gt;
&lt;p&gt;	AND s.xType = 'U'&lt;/p&gt;
&lt;p&gt; ORDER BY u.Constraint_Name --Get FK constraints first&lt;/p&gt;
&lt;p&gt;OPEN Constraints&lt;/p&gt;
&lt;p&gt;FETCH NEXT FROM Constraints INTO @TableName, @ConstraintName&lt;/p&gt;
&lt;p&gt;WHILE @@FETCH_STATUS = 0&lt;/p&gt;
&lt;p&gt;BEGIN &lt;/p&gt;
&lt;p&gt;IF LEFT(@ConstraintName, 2) = 'FK'&lt;/p&gt;
&lt;p&gt;BEGIN&lt;/p&gt;
&lt;p&gt;DECLARE @FKTableName as varchar(50)&lt;/p&gt;
&lt;p&gt;DECLARE @FKName as varchar(50)&lt;/p&gt;
&lt;p&gt;SET @FKName = &amp;nbsp;(SELECT TABLE_CATALOG FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_CATALOG = @TableName)&lt;/p&gt;
&lt;p&gt;SET @FKTableName = (SELECT object_name(fkeyid) from sysreferences where object_name(constid) = @FKName)&lt;/p&gt;
&lt;p&gt; EXEC('USE ' + @DatabaseName + ' ALTER TABLE [' + @TableName + '] DROP CONSTRAINT [' + @ConstraintName + ']')&lt;/p&gt;
&lt;p&gt; FETCH NEXT FROM Constraints INTO @TableName, @ConstraintName&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
&lt;p&gt;ELSE --Else if there are no foreign key constraints on the table&lt;/p&gt;
&lt;p&gt;BEGIN&lt;/p&gt;
&lt;p&gt; EXEC('USE ' + @DatabaseName + ' ALTER TABLE [' + @TableName + '] DROP CONSTRAINT [' + @ConstraintName + ']')&lt;/p&gt;
&lt;p&gt; FETCH NEXT FROM Constraints INTO @TableName, @ConstraintName&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
&lt;p&gt;CLOSE Constraints&lt;/p&gt;
&lt;p&gt;DEALLOCATE Constraints&lt;/p&gt;
&lt;p&gt;DECLARE Tables CURSOR FOR&lt;/p&gt;
&lt;p&gt; SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES u&lt;/p&gt;
&lt;p&gt; JOIN SYSOBJECTS s&lt;/p&gt;
&lt;p&gt;	ON u.TABLE_NAME = s.Name&lt;/p&gt;
&lt;p&gt; WHERE TABLE_CATALOG = @DatabaseName&lt;/p&gt;
&lt;p&gt;	AND s.xType = 'U'&lt;/p&gt;
&lt;p&gt;OPEN Tables&lt;/p&gt;
&lt;p&gt;FETCH NEXT FROM Tables INTO @TableName&lt;/p&gt;
&lt;p&gt;WHILE @@FETCH_STATUS = 0&lt;/p&gt;
&lt;p&gt;BEGIN &lt;/p&gt;
&lt;p&gt; EXEC('USE ' + @DatabaseName + ' DROP TABLE [' + @TableName + ']')&lt;/p&gt;
&lt;p&gt; FETCH NEXT FROM Tables INTO @TableName&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
&lt;p&gt;CLOSE Tables&lt;/p&gt;
&lt;p&gt;DEALLOCATE Tables&lt;/p&gt;
&lt;p&gt;END &lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;p&gt;SET QUOTED_IDENTIFIER OFF &lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;p&gt;SET ANSI_NULLS ON &lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6421212" width="1" height="1"&gt;</description></item><item><title>re: [T-SQL] Drop all constraints on a table</title><link>http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx#6421038</link><pubDate>Sat, 19 Jul 2008 16:01:18 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6421038</guid><dc:creator>Adam Turner</dc:creator><author>Adam Turner</author><description>&lt;p&gt;Here's some code that will go a step further and drop the tables as well as check to be sure you're not on the production server&amp;quot;&lt;/p&gt;
&lt;p&gt;CREATE PROCEDURE usp_ClearConstraints&lt;/p&gt;
&lt;p&gt;	@DatabaseName varchar(50)&lt;/p&gt;
&lt;p&gt;AS&lt;/p&gt;
&lt;p&gt;IF @@ServerName &amp;lt;&amp;gt; 'YourProductionServerName'&lt;/p&gt;
&lt;p&gt;BEGIN&lt;/p&gt;
&lt;p&gt;DECLARE @TableName NVARCHAR(50)&lt;/p&gt;
&lt;p&gt;DECLARE @ConstraintName NVARCHAR(50)&lt;/p&gt;
&lt;p&gt;DECLARE Constraints CURSOR FOR&lt;/p&gt;
&lt;p&gt; SELECT TABLE_NAME, CONSTRAINT_NAME &lt;/p&gt;
&lt;p&gt;	FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE u&lt;/p&gt;
&lt;p&gt; JOIN SYSOBJECTS s&lt;/p&gt;
&lt;p&gt;	ON u.TABLE_NAME = s.Name&lt;/p&gt;
&lt;p&gt; WHERE TABLE_CATALOG = @DatabaseName&lt;/p&gt;
&lt;p&gt;	AND s.xType = 'U'&lt;/p&gt;
&lt;p&gt;OPEN Constraints&lt;/p&gt;
&lt;p&gt;FETCH NEXT FROM Constraints INTO @TableName, @ConstraintName&lt;/p&gt;
&lt;p&gt;WHILE @@FETCH_STATUS = 0&lt;/p&gt;
&lt;p&gt;BEGIN &lt;/p&gt;
&lt;p&gt; EXEC('USE ' + @DatabaseName + ' ALTER TABLE [' + @TableName + '] DROP CONSTRAINT [' + @ConstraintName + ']')&lt;/p&gt;
&lt;p&gt; FETCH NEXT FROM Constraints INTO @TableName, @ConstraintName&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
&lt;p&gt;CLOSE Constraints&lt;/p&gt;
&lt;p&gt;DEALLOCATE Constraints&lt;/p&gt;
&lt;p&gt;DECLARE Tables CURSOR FOR&lt;/p&gt;
&lt;p&gt; SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES u&lt;/p&gt;
&lt;p&gt; JOIN SYSOBJECTS s&lt;/p&gt;
&lt;p&gt;	ON u.TABLE_NAME = s.Name&lt;/p&gt;
&lt;p&gt; WHERE TABLE_CATALOG = @DatabaseName&lt;/p&gt;
&lt;p&gt;	AND s.xType = 'U'&lt;/p&gt;
&lt;p&gt;OPEN Tables&lt;/p&gt;
&lt;p&gt;FETCH NEXT FROM Tables INTO @TableName&lt;/p&gt;
&lt;p&gt;WHILE @@FETCH_STATUS = 0&lt;/p&gt;
&lt;p&gt;BEGIN &lt;/p&gt;
&lt;p&gt; EXEC('USE ' + @DatabaseName + ' DROP TABLE [' + @TableName + ']')&lt;/p&gt;
&lt;p&gt; FETCH NEXT FROM Tables INTO @TableName&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
&lt;p&gt;CLOSE Tables&lt;/p&gt;
&lt;p&gt;DEALLOCATE Tables&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6421038" width="1" height="1"&gt;</description></item><item><title>re: [T-SQL] Drop all constraints on a table</title><link>http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx#6254293</link><pubDate>Fri, 06 Jun 2008 19:43:26 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6254293</guid><dc:creator>Shrikant</dc:creator><author>Shrikant</author><description>&lt;p&gt;Thanks Sean for your script. &amp;nbsp;Worked flawlessly. &amp;nbsp;I was about to put my coding cap on, but your script fixed my problem. &amp;nbsp;Thanks.&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6254293" width="1" height="1"&gt;</description></item><item><title>re: [T-SQL] Drop all constraints on a table</title><link>http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx#442725</link><pubDate>Thu, 13 Apr 2006 06:41:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:442725</guid><dc:creator>Sean Price</dc:creator><author>Sean Price</author><description>Something like this would work to drop all the FK constraints off the table.&lt;br&gt;&lt;br&gt;DECLARE @database nvarchar(50)&lt;br&gt;DECLARE @table nvarchar(50)&lt;br&gt;set @database = 'dotnetnuke'&lt;br&gt;set @table = 'tabs'&lt;br&gt;declare @schema nvarchar(128), @tbl nvarchar(128), @constraint nvarchar(128)&lt;br&gt;DECLARE @sql nvarchar(255)&lt;br&gt;declare cur cursor fast_forward for&lt;br&gt;	select distinct cu.constraint_schema, cu.table_name, cu.constraint_name &lt;br&gt;	from information_schema.table_constraints tc &lt;br&gt;	join information_schema.referential_constraints rc on rc.unique_constraint_name = tc.constraint_name&lt;br&gt;	join information_schema.constraint_column_usage cu on cu.constraint_name = rc.constraint_name&lt;br&gt;	where tc.constraint_catalog = @database and tc.table_name = @table&lt;br&gt;open cur&lt;br&gt; fetch next from cur into @schema, @tbl, @constraint&lt;br&gt;while @@fetch_status &amp;lt;&amp;gt; -1&lt;br&gt; begin&lt;br&gt;	select    @sql = 'ALTER TABLE ' + @schema + '.' + @tbl + ' DROP CONSTRAINT ' + @constraint     &lt;br&gt;    exec    sp_executesql @sql&lt;br&gt;    fetch next from cur into @schema, @tbl, @constraint&lt;br&gt; end&lt;br&gt;close cur&lt;br&gt;deallocate cur&lt;br&gt;&lt;br&gt;You could UNION your query onto the above and do both queries in one shot. Might run into some RI errors depending on the order things got deleted though.&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=442725" width="1" height="1"&gt;</description></item></channel></rss>