DECLARE @ConstraintName nvarchar(128) DECLARE @Command nvarchar(4000) DECLARE TableTemporary CURSOR LOCAL FOR Select 'ALTER TABLE '+tab.name+' DROP CONSTRAINT '+sysobjects.name From SysObjects INNER JOIN (Select [Name],[ID] From SysObjects Where XType = 'U') As Tab On Tab.[ID] = Sysobjects.[Parent_Obj] Inner Join sysconstraints On sysconstraints.Constid = Sysobjects.[ID] Inner Join SysColumns Col On Col.[ColID] = sysconstraints.[ColID] And Col.[ID] = Tab.[ID] OPEN TableTemporary FETCH NEXT FROM TableTemporary INTO @ConstraintName WHILE @@fetch_status = 0 BEGIN SET @Command = @ConstraintName EXEC sp_executesql @Command FETCH NEXT FROM TableTemporary into @ConstraintName ENDThis has been tested well on two servers. Both are SQL Server 2005. When we moved that one into production, also a SQL Server 2005, we got this message: