2010-12-16 14 views
5

kullanan tüm bağımlı nesneler, ama bunu kaldırmaya çalıştığınızda:Damla sütun ve bir tablodan bir sütunu kaldırmak için gereken veri tanımlama dili

nesne 'object_name' sütunu 'column_name' üzerinde bağlıdır .

ALTER TABLE DROP COLUMN column_name, bir veya daha fazla nesne bu sütununa erişemediğinden başarısız oldu.

ben tablolarındaki bağımlılık bakmak ve elle kaldırmak, ancak ben çok takımın tüm diğerleri üyeleri sadece güncelleme, göç ve don çalıştırabilirim (SQL DDL kullanarak) bir taşıma işlemini yapmak gerekir yapabilirsiniz Sistem nesnelerini kirletmek zorunda değilsiniz.

cevap

11

bu kodu deneyin:

Declare @TABLENAME varchar(max), @COLUMN varchar(max) 
SET @TABLENAME = 'YOURTableName' 
SET @COLUMN = 'YOURColumnName' 
Declare @CONSTRAINT varchar(max) 
        set @CONSTRAINT ='ALTER TABLE '[email protected]+' DROP CONSTRAINT ' 
        set @CONSTRAINT = @CONSTRAINT + (select SYS_OBJ.name as CONSTRAINT_NAME 
        from sysobjects SYS_OBJ 
        join syscomments SYS_COM on SYS_OBJ.id = SYS_COM.id 
        join sysobjects SYS_OBJx on SYS_OBJ.parent_obj = SYS_OBJx.id 
        join sysconstraints SYS_CON on SYS_OBJ.id = SYS_CON.constid 
        join syscolumns SYS_COL on SYS_OBJx.id = SYS_COL.id 
        and SYS_CON.colid = SYS_COL.colid 
        where 
        SYS_OBJ.uid = user_id() and SYS_OBJ.xtype = 'D' 
        and [email protected] and [email protected]) 
        exec(@CONSTRAINT) 

ve sonra düzenli alter tablo çalıştırın: Eğer o sütun üzerindeki tüm bağımlılıkları kaldırmak birinci kod ile

ALTER TABLE YOURTABLENAME 
DROP COLUMN YOURCOLUMNNAME 

ve sonra sorunsuz kaldırabilirsiniz .

DÜZENLEME - Çıkarma Varsayılan Değerler Kısıtlamalar:

Yukarıdaki kod bu durumda, bu yüzden DEFAULT_CONSTRAINTS kaldırmak gibi görünüyor değil aynı zamanda kullanmalısınız:

DECLARE @ConstraintName nvarchar(200) 
SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__') AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns WHERE NAME = N'__ColumnName__' AND object_id = OBJECT_ID(N'__TableName__')) 
IF @ConstraintName IS NOT NULL 
    EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName) 
İlgili konular