删除数据库的所有存储过程、主键、外键、索引等数据库教程 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    存储过程|数据|数据库|索引

    --删除存储过程

    DECLARE @STRING VARCHAR(8000)

    WHILE EXISTS(SELECT NAME FROM SYSOBJECTS WHERE TYPE='P' AND STATUS>=0)

    BEGIN

    SELECT TOP 1 @STRING='DROP PROCEDURE '+NAME FROM  SYSOBJECTS   WHERE  TYPE = 'P' AND STATUS>=0

    --SELECT @STRING

    EXEC(@STRING)

    END

    GO

    --默认值或 DEFAULT 约束

    DECLARE @STRING VARCHAR(8000)

    WHILE EXISTS(SELECT NAME FROM SYSOBJECTS WHERE XTYPE='D')

    BEGIN

    SELECT top 1 @STRING='ALTER TABLE '+B.NAME+' DROP CONSTRAINT '+A.NAME

    FROM (SELECT PARENT_OBJ,NAME FROM SYSOBJECTS WHERE XTYPE='D') A,

    (SELECT ID,NAME FROM SYSOBJECTS WHERE OBJECTPROPERTY(ID, N'ISUSERTABLE') = 1) B

    WHERE A.PARENT_OBJ=B.ID

    EXEC(@STRING)

    END

    GO

    --UNIQUE 约束

    DECLARE @STRING VARCHAR(8000)

    WHILE EXISTS(SELECT NAME FROM SYSOBJECTS WHERE XTYPE='UQ')

    BEGIN

    SELECT top 1 @STRING='ALTER TABLE '+B.NAME+' DROP CONSTRAINT '+A.NAME

    FROM (SELECT PARENT_OBJ,NAME FROM SYSOBJECTS WHERE XTYPE='UQ') A,

    (SELECT ID,NAME FROM SYSOBJECTS WHERE OBJECTPROPERTY(ID, N'ISUSERTABLE') = 1) B

    WHERE A.PARENT_OBJ=B.ID

    EXEC(@STRING)

    END

    GO

    --FOREIGN KEY 约束

    DECLARE @STRING VARCHAR(8000)

    WHILE EXISTS(SELECT NAME FROM SYSOBJECTS WHERE TYPE='F')

    BEGIN

    SELECT top 1 @STRING='ALTER TABLE '+B.NAME+' DROP CONSTRAINT '+A.NAME

    FROM (SELECT PARENT_OBJ,NAME FROM SYSOBJECTS WHERE TYPE='F') A,

    (SELECT ID,NAME FROM SYSOBJECTS WHERE OBJECTPROPERTY(ID, N'ISUSERTABLE') = 1) B

    WHERE A.PARENT_OBJ=B.ID

    EXEC(@STRING)

    END

    GO

    --PRIMARY KEY 约束

    DECLARE @STRING VARCHAR(8000)

    WHILE EXISTS(SELECT NAME FROM SYSOBJECTS WHERE XTYPE='PK')

    BEGIN

    SELECT top 1 @STRING='ALTER TABLE '+B.NAME+' DROP CONSTRAINT '+A.NAME

    FROM (SELECT PARENT_OBJ,NAME FROM SYSOBJECTS WHERE XTYPE='PK') A,

    (SELECT ID,NAME FROM SYSOBJECTS WHERE OBJECTPROPERTY(ID, N'ISUSERTABLE') = 1) B

    WHERE A.PARENT_OBJ=B.ID

    EXEC(@STRING)

    END

    GO

    --触发器

    DECLARE @STRING VARCHAR(8000)

    WHILE EXISTS(SELECT NAME FROM SYSOBJECTS WHERE XTYPE='TR')

    BEGIN

    SELECT top 1 @STRING='DROP TRIGGER '+NAME FROM SYSOBJECTS WHERE XTYPE='TR'

    EXEC(@STRING)

    END

    GO

    --索引

    declare @string varchar(8000)

    while exists(

    select TABLE_NAME= o.name,INDEX_NAME= x.name

    from sysobjects o, sysindexes x, syscolumns c, sysindexkeys xk

    where o.type in ('U')

    and convert(bit,(x.status & 0x800)/0x800)=0

    and x.id = o.id

    and o.id = c.id

    and o.id = xk.id

    and x.indid = xk.indid

    and c.colid = xk.colid

    and xk.keyno <= x.keycnt

    and permissions(o.id, c.name) <> 0

    and    (x.status&32) = 0 -- No hypothetical indexes

    group by o.name,x.name)

    begin

    select top 1 @string='drop index '+o.name+'.'+ x.name

    from sysobjects o, sysindexes x, syscolumns c, sysindexkeys xk

    where o.type in ('U')

    and convert(bit,(x.status & 0x800)/0x800)=0

    and x.id = o.id

    and o.id = c.id

    and o.id = xk.id

    and x.indid = xk.indid

    and c.colid = xk.colid

    and xk.keyno <= x.keycnt

    and permissions(o.id, c.name) <> 0

    and    (x.status&32) = 0 -- No hypothetical indexes

    group by o.name,x.name

    exec(@string)

    end

    GO

最新文章