• 数据查询表,列名对比


        在数据库里创建、删除表时,往往需要判断这个表是否存在; 有时候在修改表字段,比如添加、删除字段时也需要事先判断该字段是否存在,这往往有对应的脚本或操作,不同的数据库有不同的相关的对象、脚本。下面我们拿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
    描述数据库中所有的用户可以访问的表的列属性。
    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    从服务器上下载下来的代码,部署到本地时,Url自动带www前缀
    个人说明
    名词解释
    Bandizip-解压缩软件
    uTools-工具插件集
    Geek-软件卸载工具
    Microsoft商店软件推荐
    Docker入门第九章
    Docker入门第八章
    IDM-下载工具
  • 原文地址:https://www.cnblogs.com/kerrycode/p/1650174.html
Copyright © 2020-2023  润新知