在 SQL 中检索列信息(复合键)

2023-12-02

我有一个大型 SQL 数据库,我需要验证表和列的结构(而不​​是数据本身)。因此,我需要生成所有表的列表,然后为每个表生成其所有列,然后为每列生成其数据类型、长度/精度、序号位置以及它是否是该表主键的一部分。

我可以通过以下查询获得我需要的大部分内容:

SELECT TABLE_NAME, ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE
FROM INFORMATION_SCHEMA.COLUMNS

但是,我不确定如何检查列是否是主键的一部分。此外,对于那些 PK 由多列组成的表,我想知道键中每一列的序号位置。到目前为止我发现的信息与设置密钥而不是读取密钥有关。

我有兴趣在 SQL Server 和 Oracle 中执行此操作。


在 SQL Server 中你可以这样做

SELECT K.TABLE_CATALOG, 
       K.TABLE_NAME, 
       K.COLUMN_NAME, 
       K.ORDINAL_POSITION 
FROM   INFORMATION_SCHEMA.KEY_COLUMN_USAGE K 
       INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
         ON K.TABLE_CATALOG = TC.TABLE_CATALOG 
            AND K.TABLE_SCHEMA = TC.TABLE_SCHEMA 
            AND K.CONSTRAINT_NAME = TC.CONSTRAINT_NAME 
WHERE  TC.CONSTRAINT_TYPE = 'PRIMARY KEY' 

or

SELECT Object_name(C.OBJECT_ID) TABLE_NAME, 
       C.NAME, 
       IC.INDEX_COLUMN_ID 
FROM   SYS.KEY_CONSTRAINTS K 
       INNER JOIN SYS.INDEX_COLUMNS IC 
         ON K.PARENT_OBJECT_ID = IC.OBJECT_ID 
            AND K.UNIQUE_INDEX_ID = IC.INDEX_ID 
       INNER JOIN SYS.COLUMNS C 
         ON IC.OBJECT_ID = C.OBJECT_ID 
            AND IC.COLUMN_ID = C.COLUMN_ID 
WHERE  K.TYPE = 'PK' 

在甲骨文中

SELECT K.OWNER, 
       K.TABLE_NAME, 
       K.INDEX_NAME, 
       C.COLUMN_NAME, 
       C.COLUMN_POSITION 
FROM   ALL_CONSTRAINTS K 
       INNER JOIN ALL_IND_COLUMNS C 
         ON K.OWNER = C.INDEX_OWNER 
            AND K.TABLE_NAME = C.TABLE_NAME 
            AND K.INDEX_NAME = C.INDEX_NAME 
WHERE  K.CONSTRAINT_TYPE = 'P' 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL 中检索列信息(复合键) 的相关文章

随机推荐

  • 在 Visual C++ 2013 中使用 wifstrem Shift-JIS 解码失败

    我正在尝试使用 std wifstream 和 std getline 读取以 Shift JIS cp 932 编码的文本文件 以下代码在 VS2010 中有效 但在 VS2013 中失败 std wifstream in in open
  • Rails 4 在初始化器中使用应用程序助手

    是否可以在应用程序内部包含 使用应用程序帮助器方法config initializers browser blocker rb 我正在使用浏览器宝石检测并阻止较旧的非现代浏览器 Rails configuration middleware
  • 负指数的幂

    我不确定平方幂是否可以处理负指数 我实现了以下代码 该代码仅适用于正数 include
  • 尝试调用委托时出现“不支持方法”错误

    我有一个函数Run string string 我想在单独的线程上运行 所以我使用委托并BeginInvoke private Func
  • 在 Spark Scala 中保存并覆盖文件

    我有一个文本文件 其中第一列用表名称表示 第二列用日期表示 两列之间的分隔符由空格表示 数据表示如下 员工 txt organization 4 15 2018 employee 5 15 2018 我的要求是读取文件并根据业务逻辑更新日期
  • Jquery img.load 问题

    我正在使用 jQuery循环插件循环浏览一些图像 这些图像都包含在 DIV 内 我不希望循环插件在所有图像 或者至少是前 4 个或 5 个图像 加载完成之前运行 这样就不会出现尚未加载的图像 有一个简单的方法可以做到这一点吗 我尝试将类 l
  • ASP.NET动态添加UserControl到PlaceHolder,不触发Click事件,只触发Page_Load

    在我的 ASP Net 页面中 我有占位符和按钮 当用户单击此按钮时 我将一些 UserControls 从我的接口方法 getControl 添加到 PlaceHolder 代码 protected void ActionBtn Clic
  • TableSorter 过滤器和滚动器小部件更新

    我正在尝试将 TableSorter 与 Widgets Scroller 和 Filters 一起使用 它们工作完美 table tablesorter theme blue widgets zebra filter scroller 但
  • jQuery 根据单击的锚点更改选择框值

    当有人单击链接时 我需要更改选择框值 a class cli href 0 Jan a a class cli href 1 Feb a a class cli href 2 Mar a a class cli href 3 Apr a a
  • PHP 和 MSSQL 未安装在 centos 7 中

    我想在CentOS Linux系统中通过PHP连接MSSQl服务器 但低于错误 Fatal error Call to undefined function mssql connect in var www h 为此 我参考了一些网站并找到
  • Java 连接 Microsoft Access 2007 数据库的正确方法是什么?

    我正在尝试使用 jdbc odbc 桥创建一个简单的连接 public static Connection getConnection Connection con null try Class forName sun jdbc odbc
  • || 之间的区别和||=? [复制]

    这个问题在这里已经有答案了 我是红宝石新手 有什么区别 and gt gt a 6 4 gt 6 gt gt a 6 gt 6 听起来他们是一样的 仅当左侧值为 false 时 才会将左侧值设置为右侧值 在这种情况下 6 和 4 都是真值
  • 如何使用 Mahout 的sequencefile API 代码?

    Mahout 中有一个用于创建序列文件的命令 如下所示bin mahout seqdirectory c UTF 8 i
  • C,西格玛的时间复杂度?

    我怎样才能找到以下代码的时间复杂度 抱歉添加图像 一旦我可以访问笔记本电脑 我将重新编辑我的问题 到目前为止我所做的 第一个循环迭代 n 次 第二个循环迭代 i 次 第三个循环迭代 log i j 次 所以简化后得到 对于 i log i
  • 将数据从 SAP 传输到 SQL Server 的最佳方法是什么?

    我们希望基于 SAP 表从头开始构建一个新的数据仓库 对于提取 转换和加载 ETL 过程 我们希望使用 Microsoft SQL Server Integration Services 市场上有许多供应商 如 Theobald CData
  • 如何在 Joomla! 中插入 HTML 标签模块标题?

    我想做的是将一些 HTML 标签添加到我的 Joomla 模块标题 我需要这样的东西 Some b Title b 但是当我保存时 Joomla 会修剪标题并删除所有 HTML 标签 我检查了administrator com conten
  • 如何使用自定义条件公式计算 Excel 电子表格上的交易数量?

    考虑以下 您有一个 Excel 电子表格 其中包含Trade History特定交易账户的Binance Exchange 该文件以一种方式存储信息 您可以知道特定交易是如何进行的 FILLED 这意味着特定的交易SIDE应该有另一个opp
  • 在 PyCharm 中运行结束时启动脚本

    对于特定情况 我需要所有 PyCharm 项目在每次运行结束时运行给定的脚本 在运行 调试配置中 有一个选项可以在启动之前运行脚本 运行结束后是否有类似的选项来运行脚本 如果它不存在 正如我怀疑的那样 我是否可以使用另一个技巧 也许使用 z
  • 忽略与财产相关的警告

    我想忽略这些警告这些警告在我使用时出现有效架构 arm64 armv7 armv7s 这些类型的警告出现在许多标题中 我想忽略这些警告 就像 clang 处理已弃用的警告一样 pragma clang diagnostic push pra
  • 在 SQL 中检索列信息(复合键)

    我有一个大型 SQL 数据库 我需要验证表和列的结构 而不 是数据本身 因此 我需要生成所有表的列表 然后为每个表生成其所有列 然后为每列生成其数据类型 长度 精度 序号位置以及它是否是该表主键的一部分 我可以通过以下查询获得我需要的大部分