How do I drop a foreign key constraint only if it exists in sql server?

前端 未结 11 1594
礼貌的吻别
礼貌的吻别 2020-12-04 05:34

I can drop a table if it exists using the following code but do not know how to do the same with a constraint:

IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJE         


        
相关标签:
11条回答
  • 2020-12-04 06:07

    I think this will helpful to you...

        DECLARE @ConstraintName nvarchar(200)
    SELECT 
        @ConstraintName = KCU.CONSTRAINT_NAME
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC 
    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
        ON KCU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG  
        AND KCU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA 
        AND KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
    WHERE
        KCU.TABLE_NAME = 'TABLE_NAME' AND
        KCU.COLUMN_NAME = 'TABLE_COLUMN_NAME'
    IF @ConstraintName IS NOT NULL EXEC('alter table TABLE_NAME drop  CONSTRAINT ' + @ConstraintName)
    

    It will delete foreign Key Constraint based on specific table and column.

    0 讨论(0)
  • 2020-12-04 06:08

    In SQL Server 2016 you can use DROP IF EXISTS:

    CREATE TABLE t(id int primary key, 
                   parentid int
                        constraint tpartnt foreign key references t(id))
    GO
    ALTER TABLE t
    DROP CONSTRAINT IF EXISTS tpartnt
    GO
    DROP TABLE IF EXISTS t
    

    See http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016.aspx

    0 讨论(0)
  • 2020-12-04 06:10

    This is a lot simpler than the current proposed solution:

    IF (OBJECT_ID('dbo.FK_ConstraintName', 'F') IS NOT NULL)
    BEGIN
        ALTER TABLE dbo.TableName DROP CONSTRAINT FK_ConstraintName
    END
    

    If you need to drop another type of constraint, these are the applicable codes to pass into the OBJECT_ID() function in the second parameter position:

    C = CHECK constraint
    D = DEFAULT (constraint or stand-alone)
    F = FOREIGN KEY constraint
    PK = PRIMARY KEY constraint
    UQ = UNIQUE constraint
    

    You can also use OBJECT_ID without the second parameter.

    Full List of types here:

    Object type:

    AF = Aggregate function (CLR)
    C = CHECK constraint
    D = DEFAULT (constraint or stand-alone)
    F = FOREIGN KEY constraint
    FN = SQL scalar function
    FS = Assembly (CLR) scalar-function
    FT = Assembly (CLR) table-valued function
    IF = SQL inline table-valued function
    IT = Internal table
    P = SQL Stored Procedure
    PC = Assembly (CLR) stored-procedure
    PG = Plan guide
    PK = PRIMARY KEY constraint
    R = Rule (old-style, stand-alone)
    RF = Replication-filter-procedure
    S = System base table
    SN = Synonym
    SO = Sequence object
    

    Applies to: SQL Server 2012 through SQL Server 2014.

    SQ = Service queue
    TA = Assembly (CLR) DML trigger
    TF = SQL table-valued-function
    TR = SQL DML trigger
    TT = Table type
    U = Table (user-defined)
    UQ = UNIQUE constraint
    V = View
    X = Extended stored procedure
    
    0 讨论(0)
  • 2020-12-04 06:12

    Ok, I know I'm late to the party, but here is the syntax I think is best. Add a schema name if needed to the OBJECT_ID clause.

    IF OBJECTPROPERTY(OBJECT_ID(N'My_FK_name'),'IsConstraint') =1
    ALTER TABLE dbo.TableName DROP CONSTRAINT My_FK_name
    
    0 讨论(0)
  • 2020-12-04 06:13
    ALTER TABLE [dbo].[TableName]
        DROP CONSTRAINT FK_TableName_TableName2
    
    0 讨论(0)
提交回复
热议问题