数据查询表,列名对比-阿里云开发者社区

开发者社区> 潇湘隐者> 正文

数据查询表,列名对比

简介:
+关注继续查看

    在 数据库里创建、删除表时,往往需要判断这个表是否存在; 有时候在修改表字段,比如添加、删除字段时也需要事先判断该字段是否存在,这往往有对应的脚本或操作,不同的数据库有不同的相关的对象、脚本。下面我们拿 Access 2003 , SQL Server 2005 , Oracle 10i来分析对比一下吧。

一:在SQL Server 2005 里查询某个表是否存在以及查询某个表有哪些字段的的脚本如下所示:

Code Snippet
  1. SELECT * FROM dbo.SYSOBJECTS WHERE XTYPE ='U' AND NAME ='TableName';
  2.  
  3.  
  4. SELECT * FROM SYSCOLUMNS WHERE ID = OBJECT_ID(N'TableName');

       

1.1 查询当前数据库是否存在用户表Users,其中U表示用户表,你也可以在SYSOBJECTS 查询存储过程、触发器等

详细参数如下:

C = CHECK 约束

D = 默认设置或DEFAULT 约束

F = FOREIGN KEY 约束

L = 日志

FN = 标量函数

IF = 内联表函数

P = 存储过程

PK = PRIMARY KEY 约束(类型为 K)

RF = 复制筛选器存储过程

S = 系统表

TF = 表函数

TR = 触发器

U = 用户表

UQ = UNIQUE 约束(类型为 K)

V = 视图

X = 扩展存储过程

例子:

SELECT * FROM dbo.SYSOBJECTS WHERE XTYPE ='U' AND NAME ='Users'  

1.2  查询表Users存在哪些字段

SELECT * FROM SYSCOLUMNS WHERE ID = OBJECT_ID(N'Users') 

  

二:在Access 里面查询某个表是否存在的脚本如下所示:

Code Snippet
  1. SELECT*
  2.   FROMMsysObjects
  3.  WHEREParentId = ( SELECT o.ID
  4.                    FROM   MsysObjects o
  5.                    WHERE  NAME = 'Tables'
  6.                  )
  7.       AND NAME = 'Student'

这是查询是否存在一个Student表在当前数据库 ,其实MsysObjects是一个系统表,可能很多人会问这个表在那里,其实要看到这个表的话,选择工具—》选项 —》视图 后选中系统对象后,你就可以在表里面看到这个表了

                            

 

 

当然Access里面没有保存表字段的系统表,如果你想取得某个表的所有字段,你可以用如下的代码来获取

Code
  1. private string[,] GetTableColumn(string tableName)
  2. {
  3.         string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=H:\\Code Resouse\\db1.mdb";
  4.  
  5.         OleDbConnection connection = new OleDbConnection(connectionString);
  6.  
  7.         OleDbCommand cmd = new OleDbCommand();
  8.         cmd.CommandText = "SELECT * FROM " + tableName + " WHERE 1 <> 1";
  9.         cmd.Connection = connection;
  10.  
  11.         connection.Open();
  12.  
  13.         OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmd);
  14.  
  15.         DataTable dtSchema = new DataTable();
  16.         dataAdapter.Fill(dtSchema);
  17.         connection.Close();
  18.  
  19.         String[,] DataColumns = new string[dtSchema.Columns.Count, 2];
  20.         for (int index = 0; index < dtSchema.Columns.Count; index++)
  21.         {
  22.             DataColumns[index, 0] = dtSchema.Columns[index].ColumnName;
  23.             DataColumns[index, 1] = dtSchema.Columns[index].DataType.FullName;
  24.  
  25.         }
  26.         return DataColumns;
  27.     }

三: 在Oracle里面你可以从DBA_ALL_TABLES  、ALL_ALL_TABLES  、USER_ALL_TABLES  、ALL_TABLES

等这几个表查找是否存在某个用户表。

存储数据库表的系统表视图主要有:  

   
  DBA_ALL_TABLES  
   
  描述数据库中所有的对象以及相关的表。  
   
  ALL_ALL_TABLES  
   
  描述数据库中所有的用户可以访问的对象以及相关的表。  
   
  USER_ALL_TABLES  
   
  描述数据库中当前用户拥有的对象以及相关的表。  
   
   
  DBA_TABLES  
   
  描述数据库中所有相关的表。  
   
  ALL_TABLES  
   
  描述数据库中所有的用户可以访问的相关的表。  
   
  USER_TABLES  
   

  描述数据库中当前用户拥有的相关的表。

SQL Code
  1. SELECT * FROM ALL_TABLES WHERE TABLE_NAME ='Users'
  2.  
  3. SELECT * FROM ALL_TAB_COLS WHERE TABLE_NAME = 'Users'
  4.  
  5. SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'Users'

 

存储数据库表的列属性的系统表/视图主要有:
DBA_TAB_COLUMNS
描述数据库中所有的表的列属性。
ALL_TAB_COLUMNS
描述数据库中所有的用户可以访问的表的列属性。
USER_TAB_COLUMNS
描述数据库中当前用户拥有的表的列属性。
ALL_TAB_COLS
描述数据库中所有的用户可以访问的表的列属性。 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL查询数据并插入新表
SQL查询数据并插入新表     --如果接受数据导入的表已经存在 insert into 表 select * from tablename --如果导入数据并生成表 select * into 表 from tablename  网名:浩秦; 邮箱:root#landv.pw; 只要我能控制一個國家的貨幣發行,我不在乎誰制定法律。
1096 0
如何在oracle中查询所有用户表的表名、主键名称、索引、外键等
1、查找表的所有索引(包括索引名,类型,构成列):  select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表  2、查找表的主键(包括名
2064 0
MySQL 基础---多表数据查询
多表数据记录查询: 关系数据的各种操作 内连接查询 外连接查询 子查询 关系数据操作 传统的运算: 并(UNION) 笛卡尔积(CARTESIAN PRODUCT) 专门针对数据库操作的运算---连接(JOIN) (1) 并(UNION) “并”就是把具有相同字段数目和字段类型的表合并到一起。
691 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4614 0
12.28直播预告| Bulkload - Lindorm加速离线数据查询的最佳实践
大数据离线计算沉淀明细事实数据、维度数据、汇总指标数据等,由于离线读性能差,需要把数据导出到在线系统做查询加速,比如导出到Lindorm支持点查和多维检索。LTS Bulkload支持从数仓或数据湖导出数据到Lindorm。本主题将介绍LTS Bulkload的原理和优势,批量更新在一致性、性能、稳定性上的挑战以及LTS Bulkload如何应对这些挑战。
99 0
MySQL 基础---单表数据记录查询
**查询数据记录操作: ** 简单数据记录查询 条件数据记录查询 排序数据记录查询 限制数据记录查询 统计函数和分组数据记录查询 测试表 # 创建雇员表 create table t_employee( empno int(1...
762 0
CLI使用案例3:轻松跨库查询数据并下载到本地
使用日志服务想要跨库查询? 网页控制台下载数据一页一页十分痛苦? SDK分页加格式化有些复杂? 不想写代码就可以查询数据并下载到本地? 日志服务CLI可以帮助你轻松解决这些问题.
2686 0
Cassandra 2.1 数据查询语法。
1,官方文档,基本类型 数据查询语言文档: http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/update_r.html cql 支持的数据类型: 相对于 MySQL,有几个类型比较有意思,uuid类型,map,list,set类型,这个优化关联查询,直接将List存入一条记录。 CQL Type Cons
1664 0
+关注
潇湘隐者
网名潇湘隐者/潇湘剑客、英文名Kerry,兴趣广泛,广泛涉猎,个性随意,不善言辞。执意做一名会写代码的DBA,混迹于IT行业
777
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载