回 帖 发 新 帖 刷新版面

主题:删除除...之外所有表怎么编写?

Dim SQLINSERT$
SQLINSERT = "  "
    CLDB.DB_Connect
    CLDB.OdbcExt (SQLINSERT)
    CLDB.DB_Disconnect
    MsgBox " 初始化成功! ", vbExclamation + vbOKOnly, "提示"

End Sub

我要实现删除除BIAO和JIEOVER(表名)以外的所有表,而且要将JIEOVER表清空!
谢谢怎么编写SQL?

回复列表 (共2个回复)

沙发



板凳

 
我们想删除,除表a以外的所有表,但是并不知道想删除表的表名!语句如下

--首先要删除表,就要删除它的外键约束
while(1=1)
begin
declare @exit int                 --判断是否还有外键约束
declare @constr_id varchar(200)   --获取外键约束的ID
declare @table_id varchar(200)    --获取设外键的表的ID
declare @table varchar            --获取设外键的表名
declare @constr_name varchar(100) --获取约束名 
declare @str varchar(100)   --删除表语句字符串
declare @drop_constr varchar(100)   --删除约束字符串
declare @conn_str varchar(2000)                  --将删除语句连接起来的字符串    
select  top 1 @constr_id=id,@constr_name=name from sysobjects where type='f'
select  @table_id=fkeyid from sysforeignkeys where constid=@constr_id
select  @table=name from sysobjects where id=@table_id
select  @exit=count(*) from sysobjects where type='f'
if(@exit!=0)
begin
set @str='alter table'
set @drop_constr='drop constraint'
set @conn_str=@str+' '+@table+' '+@drop_constr+' '+@constr_name
exec(@conn_str)
end
else
break
end

if exists(select * from sysobjects where name='proc_drop_table' and type='p')
     drop proc proc_drop_table
go
create proc proc_drop_table
 @table_name varchar(200)       --指定你不想删除的表名
as
while(1=1)
begin
declare @str varchar(200)
declare @exit int
set @str='drop table'
select top 1 @str=@str+' '+name from sysobjects where type='u' and name!=@table_name
select @exit=count(*) from sysobjects where type='u' and name!=@table_name
print @str
if(@exit!=0)
exec(@str)
else
begin
break
return
end
end
go

exec proc_drop_table a

我来回复

您尚未登录,请登录后再回复。点此登录或注册