怎么使用SQL语句批量删除多个表的相同字段

一个数据库中有多个表,我想批量删除这些表都有的一个字段,语句该怎么写?不是删除字段里的数据,是删除字段。
我是用PLSQL删除数据库里的字段,一个个删实在太累。其实我要删的就是主键啦,这个字段没用又碍事。唉,楼下两位能再说明白点么?

不知道您用的是什么数据库了。
不过做法肯定是一样,用两个游标,第一个游标从数据字典中检索出所有的表,第二个游标从每个表中检索所有的字段,然后遇到有要和你删除名称相同的字段的时候,执行alter table tablename drop column columnname的操作。
不过这个执行不能直接这么执行,而是设置一个字符串的变量,例如SQLSERVER,需要@delsql = 'alter table ' + @tablename + ' drop column ' + @columnname
exec(@delsql)
而oracle也一样delsql = 'alter table ' + tablename + ' drop column ' + columnname;
execute immediate delsql;
要使用这样的写法。
不可能使用一个SQL直接删除所有的。追问

不明白,是不是还是要条条删啊?那依然很麻烦哎……

追答

您用的什么数据库?
您要执行的是ALTER TABLE TB_EMP DROP COLUMN EMP_NAME。。。这样的操作吧?
就是删除表TB_EMP中EMP_NAME这一列,不过你的这一列在其他表中也存在,你要在其他表中同样删除这个一列,是吧?
------PL/SQL执行
declare
colname varchar2(100):='要删除的列名大写';
tbname varchar2(100);
colValue varchar2(500);
delsql varchar2(1000);
--返回表名
cursor cursor_tbname is select DISTINCT table_name from user_tab_columns where column_name=colname;
begin
open cursor_tbname;
loop
fetch cursor_tbname into tbname;
exit when cursor_tbname%notfound;
delsql := 'alter table ' ||tbname|| ' drop column '||colname;
execute immediate delsql;
end loop;
close cursor_tbname;
end ;

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-27
这个批量删除写个存储过程就行了
给你个思路
删除表中一个字段
删除列语句-alter table 表名
drop column 列名;
写个存储过程把要删除的表都写进去,执行就OK 了。
第2个回答  2011-04-27
这本身就是不安全的,数据库不会给你提供这样的功能,你还是通过程序脚本来实现吧!

select name from SysObject
alter table tablename drop yourfield追问

不明白

第3个回答  2011-04-27
你说不删除数据那不就是修改主键的字段名么追问

是把字段删掉,不管里面有米数据,不过其实里面确实没数据

怎么使用SQL语句批量删除多个表的相同字段
不过做法肯定是一样,用两个游标,第一个游标从数据字典中检索出所有的表,第二个游标从每个表中检索所有的字段,然后遇到有要和你删除名称相同的字段的时候,执行alter table tablename drop column columnname的操作。不过这个执行不能直接这么执行,而是设置一个字符串的变量,例如SQLSERVER,需要@delsq...

sql中如何删除重复数据
create table ntes (id int identity primary key ,name varchar(50))insert into ntes(name,china) values('a','b')insert into ntes(name,china) values('a','b')insert into ntes(name,china) values('c','b')insert into ntes(name,china) values('a','c')insert into ntes(name...

用SQL如何批量删除具有相同前缀的表sql批量删除表?
你的思路我也不会写,但是你可以用导出工具把要保留的表导出来,然后清空数据库,再导回去.(导出的时候根据数据库的不同,导出工具可能也不同,但是让表按名称排序应该是很简单的,所以也应该很容易把不要的表过滤出来)仅供参考.

求助sql批量删除的写法
select id from A表 a inner join B表 b on a.a字段=b.c字段 删除剩下的数据:delete from A表 where id not in(select id from A表 a inner join B表 b on a.a字段=b.c字段);delete from B表 where id not in(select id from A表 a inner join B表 b on a.a字段=b.c字...

如何批量删除access不同表中的重复数据
第一步,查询俩表相同的b并把相同的b存到临时表 select ab.b into temp from ab,ac where ab.b=ac.b第二步,删除ab中的数据 delete from ab where b in (select b from temp)第三步,删除ac中的数据 delete from ac where b in (select b from temp)第四步,删除临时表 drop table ...

如何用SQL语句批量删除相同表头的表?
你是 MySQL 数据库?SELECT CONCAT('DROP TABLE ', table_name, ';') AS `准备执行的SQL`FROM information_schema.tables WHERE table_schema = '数据库名'AND table_name LIKE 'bbs%';执行上面的SQL 复制结果到 文件编辑软件上面去,修改一下。然后粘贴回来执行。

mysql 怎么通过sql语句如何批量去掉某一个表中某一个字段的下面的相同部...
UPDATE 表 SET litpic = REPLACE ( litpic , '', '');去尾

怎么批量删除excel表中相同的资料
1、按ctrl H调出替换对话方块 2、在查询内容框里输入需要删除的词,点“查询全部”,然后按ctrl A,再关闭对话方块,放被选中的任意一个单元格右键,点选删除。如果要删除某个词所在行亦可用此法。PHP中怎么批量删除资料表中的资料 <?php 先构造SQL语句 $SQL="DELETE FROM a WHERE b='...

SQLServer删除表及删除表中数据的方法
删除表的T-SQL语句为:drop table <表名> drop是丢弃的意思,drop table表示将一个表彻底删除掉。删除表数据有两种方法:delete和truncate。delete的用法如下:delete from <表名> [where条件]truncate的用法如下:truncate table <表名> delete和truncate的区别如下:1、delete可以删除表中的一条或多条...

sql能否批量删除多个行
1、首先我们打开SQL Server 2012资源管理器,在已创建好的数据库表t_call_info,查询和比较表记录。2、利用SQL Server 2012数据库资源管理器,创建删除SQL语句,使用delete。3、删除ID为10的记录,利用delete from 数据库表 where id=10。4、删除记录后,再次查询数据库表,这时ID为10的记录不存在。5...

相似回答