加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLSERVER和ORACLE批量处理表名和字段名大写

发布时间:2020-12-12 13:27:39 所属栏目:MsSql教程 来源:网络整理
导读:原文链接:http://www.cnblogs.com/tippoint/archive/2012/11/07/2758855.html 在sql移植到oracle过程中,都会遇到表名和字段名大写的问题,因为在oracle中默认表名和字段名都是大写的,虽然可以通过使用双引号的方式进行操作,如select * from "testtable"

原文链接:http://www.cnblogs.com/tippoint/archive/2012/11/07/2758855.html

在sql移植到oracle过程中,都会遇到表名和字段名大写的问题,因为在oracle中默认表名和字段名都是大写的,虽然可以通过使用双引号的方式进行操作,如select * from "testtable"但是很多情况下,这样做的代价很大,因为很多程序的代码是早已经写好的,而要修改oracle系统配置又不安全,一个比较稳妥的办法是批量修改表名和文件名。

?

先说在SQL中修改表名和字段名的办法:虽然在sql中默认是不区分表名和字段名的大小写的,但是通过sql的DTS进行数据导出导入的时候,如果表名和字段名是小写,那生成的代码中对应也是小写,反之亦然。因此通过此办法生成oracle数据表的时候就需要首先批量把sql中的表名和字段名都修改为大写,下面给出的是对应的代码。

批量修改表名:

?

?1? declare? @sql? varchar( 300) -- ,@rowcount?varchar(10),@dyncnum?int
?2? ???? declare? @tablename? varchar( 100)
?3????? declare?cursor1? cursor? for?????????
?4????? select?name?? from?sysobjects?? where?xtype? =? ' u '?? order? by?name???????????????
?5????? open?cursor1???????????????????????
?6????? fetch? next? from?cursor1? into? @tablename
?7????? while? @@fetch_status = 0???????????
?8????? begin
?9????????? set? @sql = ' sp_rename? ''' + @tablename + ''' , ''' + upper( @tablename) + ''''
10????????? print? @sql?
11????????? -- exec(@sql)?????????????
12? ???????? fetch? next? from?cursor1? into? @tablename
13????? end
14????? close?cursor1???????????????????
15????? deallocate?cursor1

??? 批量修改字段名代码:

???

?1? declare? @sql? varchar( 300)
?2????? declare? @tablecolumnname? varchar( 100),? @columnname? varchar( 100)
?3????? declare?cursor1? cursor? for?????????
?4????? select?b.name + ' .[ ' +a.name + ' ] ',a.name? from?syscolumns?a??,sysobjects?b? where?a.id? =? object_id(b.name)? and?b.xtype? =? ' u '? and?a.xtype? <> 189? and?a.xtype? <> 34? and?a.xtype? <> 35? and?a.xtype? <> 36????????????????
?5????? open?cursor1???????????????????????
?6????? fetch? next? from?cursor1? into? @tablecolumnname,@columnname
?7????? while? @@fetch_status = 0???????????
?8????? begin
?9????????? set? @sql = ' sp_rename? ''' + @tablecolumnname + ''' , ''' + upper( @columnname) + ''' , '' column '''
10????????? -- print?@sql?
11? ???????? exec( @sql)?????????????
12????????? fetch? next? from?cursor1? into? @tablecolumnname,@columnname
13????? end
14????? close?cursor1???????????????????
15????? deallocate?cursor1

?? 还有一种情况就是,表已经导入到oracle中了,但是发现表名和字段名都是小写,需要在oracle中修改表名和字段名。

这个时候,我们需要使用一种办法来帮我们自动生成修改的语句,然后copy出来执行就可以了。?

修改表名:

1? select? ' alter?table?" ' ||table_name || ' "?rename?to? ' || upper(table_name) || ' ; '? from?user_tables? where?table_name <> upper(table_name);

修改字段名:

?

1? select? ' alter?table? ' ||table_name || ' ?rename?column?" ' ||?column_name? || ' "?to? ' || upper(column_name) || ' ; '
2? from?user_tab_columns? where?column_name <> upper(column_name);

这个时候,我们可以在sql plus或者toad等客户端工具中生成对应的alter语句,然后copy出来执行就ok了。

?

引申一下,如果需要把oracle中的数据全部清空或者把表全部删除,也可以采用如上的方式

?

-- 清除数据
select? ' TURNCATE?table? ' ||table_name? || ' ; '? from?user_tables;?
-- 删除表
select? ' drop?table? ' ||table_name? || ' ; '? from?user_tables;?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读