数据查询表,列名对比

    在
数据库里创建、删除表时,往往需要判断这个表是否存在;
有时候在修改表字段,比如添加、删除字段时也需要事先判断该字段是否存在,这往往有对应的脚本或操作,不同的数据库有不同的相关的对象、脚本。下面我们拿
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

描述数据库中所有的用户可以访问的表的列属性。 

时间: 2024-11-10 01:10:47

数据查询表,列名对比的相关文章

同表中的2行数据全部进行对比,取出不同的数据

问题描述 对同表中的2行数据全部进行对比,取出不同的数据ID字段1字段2字段3字段4...1abcd2accd预期的结果:ID字段21b2c请教高手该怎么实现?谢谢 解决方案 解决方案二:你的表结构设计得不好,这样只能一个一个对比了.解决方案三:引用1楼caozhy的回复: 你的表结构设计得不好,这样只能一个一个对比了. 那请问该怎么设计呢?字段有100个左右,有更合理的结构吗?解决方案四:用这样的表结构:id字段名值1字段1a1字段2b1字段3c1字段4d2字段1a...解决方案五:引用3楼c

Migrations--CodeFirst数据表列名变动

问题描述 刚接触CodeFirst,有好多不懂的地方:比如我有一张表表名[Destinations],列名[Id,Name,Country,Description]如果修改列名Description为Description2,我发现他是"先加再删",那么Description列对应的数据如何才能迁移到Description2列下面?Migrations生成如下代码:publicoverridevoidUp(){AddColumn("dbo.Destinations"

前台页面js函数参数采用数据绑定,数据自定义列名不能显示的问题

问题描述 各位:现在有个情况,不知道各位有没有遇到过:前台页面代码:<inputid='<%#Eval("SerialNumber")%>'type="checkbox"onclick="javascript:TextFun(<%#Eval('Type').ToString()%>);"/><inputid='<%#Eval("SerialNumber")%>'type=&

SQL Server中使用 Merge 语句实现表数据之间的对比同步

表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断 再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多 种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的 时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Server 中提供的 Merge 语句来实现,并且还可以将操作的细节记录下来.具

NAS数据专用存储服务器对比分析

NAS(Network Attached Storage:网络附属存储)是一种将分布.独立的数据整合为大型.集中化管理的数据中心,以便于对不同主机和应用服务器进行访问的技术.按字面简单说就是连接在网络上, 具备资料存储功能的装置,因此也称为"网络存储器".它是一种专用数据存储服务器.它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽.提高性能.降低总拥有成本.保护投资.其成本远远低于使用服务器存储,而效率却远远高于后者. NAS被定义为一种特殊的专用数据存储服务器,

2015国内征信机构大数据整合能力对比

自2001年起,大陆地区现代企业征信业进入在竞争中发展的阶段,信用问题开始得到社会各界的广泛关注,许多政府和民间投资的企业征信机构携带大量资本如雨后春笋般出现. 随着企业征信行业环境不断改善,信息透明度低的问题日益凸显.大量与企业信用状况和历史有关的信用信息,如企业基本财务信息.法院诉讼记录.房地产及其抵押记录.银行还贷记录等,仍然停留在各个国家机关和政府部门,不能为征信机构所获取,未能发挥其应有的价值. 与此同时,随着中国企业征信市场规模的不断扩大,企业征信机构的业务集中度越来越高.不完善的信

oracle 查询表名以及表的列名_oracle

1.查询表名: 复制代码 代码如下: select table_name,tablespace_name,temporary from user_tables [where table_name=表名] 其中:table_name:表名(varchar2(30)); tablespace_name:存储表名的表空间(varchar2(30)): temporary:是否为临时表(varchar2(1)). eg: select table_name,tablespace_name,tempora

列表-水昌报表能做这样的报表吗?用于对比数据

问题描述 水昌报表能做这样的报表吗?用于对比数据 列表-水昌报表能做这样的报表吗?用于对比数据-财务数据同期对比报表"> 左边是一个报表的内容 右边是另一个报表的内容 相个内容无任何关系. 比如左边是欠款列表,可能欠了6次 右边是还款列表可能还了3次 也有可能欠了3次还了6次,最要命的是一详细资料行,如何一行显示,两个不同的数据? 解决方案 可以分栏,然后左右各显示一个表

2010移动应用商店数据对比:Android增长544%

iPhone.黑莓.Android和诺基亚Ovi应用商店应用增长对比iPhone.黑莓.Android和诺基亚Ovi应用平均价格下降对比 北京时间1月8日凌晨消息,应用商店分析公司Distimo近日发表报告,对2010年各大移动应用商店的各项数据进行了对比. 报告显示,到2010年底,苹果iTunes商店拥有约30万个应用,Android Market应用数量增至12万个,诺基亚Ovi应用商店应用数量增至2.5万个,而黑莓App World应用数量也增至1.8万个.全年iTunes中的应用数量翻