--
删除表
exec
sp_msforeachtable
'
drop table ?
'
--
- 删除存储过程
DECLARE
@STRING
VARCHAR
(
8000
)
WHILE
EXISTS
(
SELECT
NAME
FROM
SYSOBJECTS
WHERE
TYPE
=
'
P
'
AND
STATUS
>=
0
)
BEGIN
SELECT
@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
@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
@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
@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
@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
@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

