SQL 2008 - INFORMATION_SCHEMA 视图中的外键约束

2023-12-26

我正在编写一个 C# 单元测试,用于根据目标数据库(始终是 SQL 2008)以及数据映射到的类来验证 ORM 类的字符串属性。

检查指定的外键在数据库中是否有效很容易:

    static private bool ConstraintExsits(string table, string column, ConstraintType constraintType)
    {
        string constraintTypeWhereClause;
        switch (constraintType)
        {
            case ConstraintType.PrimaryKey:
                constraintTypeWhereClause = "PRIMARY KEY";
                break;
            case ConstraintType.ForeignKey:
                constraintTypeWhereClause = "FOREIGN KEY";
                break;
            default:
                throw new ArgumentOutOfRangeException("constraintType");
        }

        var cmd = new SqlCommand(
                           @"SELECT a.CONSTRAINT_NAME
                            FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS a 
                            JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE b on a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
                            WHERE a.TABLE_NAME = @table AND b.COLUMN_NAME = @column AND a.CONSTRAINT_TYPE = '" + constraintTypeWhereClause + "'",
                           Connection);
        cmd.Parameters.AddWithValue("@table", table.Trim('[').Trim(']'));
        cmd.Parameters.AddWithValue("@column", column.Trim('[').Trim(']'));
        return !string.IsNullOrEmpty((string)cmd.ExecuteScalar());
    }

现在采用以下外键关系:

我的问题:如何从“主/唯一键基表”和“主/唯一键列”侧查询关系?我看不到 INFORMATION_SCHEMA 视图中引用的这些内容。

Thanks J


这就是我想要的 SQL!

SELECT 
FK_Table  = FK.TABLE_NAME, 
FK_Column = CU.COLUMN_NAME, 
PK_Table  = PK.TABLE_NAME, 
PK_Column = PT.COLUMN_NAME, 
Constraint_Name = C.CONSTRAINT_NAME 
FROM 
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C 
INNER JOIN 
INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK 
    ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
INNER JOIN 
INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK 
    ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
INNER JOIN 
INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU 
    ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
INNER JOIN 
( 
    SELECT 
        i1.TABLE_NAME, i2.COLUMN_NAME 
    FROM 
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 
        INNER JOIN 
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 
        ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME 
        WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
) PT 
ON PT.TABLE_NAME = PK.TABLE_NAME 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 2008 - INFORMATION_SCHEMA 视图中的外键约束 的相关文章

随机推荐

  • LINQ to SQL 使用不同的行对多个列进行分组

    我有以下表结构 我想选择不同的CustomerId and CustomerName TotalCost 这是表结构和列数据类型 LogId int CustomerId string CustomerName string Cost in
  • SVG 线端点独立动画

    我正在尝试对 SVG 线端点之一进行动画处理 使其沿着特定路径移动 而另一个端点保持静止 因此线会拉伸和收缩 同时保持笔直 到目前为止 我所实现的目标是使我的整条线沿着路径移动 并将端点之一绑定到它
  • Android 问答游戏 - 每个问题的倒计时器

    我使用此处的教程创建了一个适用于 Android 的测验应用程序 http automateddeveloper blogspot co uk 2011 06 getting started complete android app htm
  • 如何停止 html 属性中 onclick 事件的事件传播?

    我有一个带有 onclick 属性的 html 元素 我需要防止该事件冒泡 我尝试这样做 div 和这个 div 但两者都不起作用 我绝对需要在 html onclick 属性中执行此操作 因为此 div 是 Razor 部分视图的一部分
  • 如何在 Mac 10.7 上的 virtualenv 中安装 MatPlotLib

    这是我尝试做的 SAASSenv miki725mac SAASSenv miki725 python Python 2 7 2 v2 7 2 8527427914a2 Jun 11 2011 15 22 34 GCC 4 2 1 Appl
  • c 编程难题

    给定一个所有元素均为正数的数组 求子序列的最大和 约束条件是序列中的 2 个数字不应在数组中相邻 因此 3 2 7 10 应返回 13 3 和 10 之和 或 3 2 5 10 7 应返回 15 3 5 和 7 之和 我尝试使用所有可能允许
  • NPM 搜索:内存不足

    在 ubuntu 14 10 3 13 0 76 generic 120 Ubuntu SMP Mon Jan 18 15 59 10 UTC 2016 x86 64 x86 64 x86 64 GNU Linux 上 当我这样做时 sud
  • 实现 AsyncTask 的技巧

    大家好 我有一个应用程序 可以在位图上放置一个圆圈 并使用滑动条更改圆圈内像素的 RGB 值 我想使用 asynctask 来加速更改像素的过程 我不知道从哪里开始 我在活动文件底部注释掉了一些代码 因为这是我第一次尝试 谁能指出我如何实现
  • 使用 OpenCV 进行头部(和肩部)检测

    如果我问了一个太新手的问题 请提前道歉 我是 OpenCV 的初学者 我已经完成了一些教程 但我还没有很好地掌握它的概念 问题 如何使用 OpenCV 进行头部检测 不是面部检测 例如在公共汽车或房间内的照片中 注意 我不想做人脸检测 只需
  • 如何使用 firestore 的安全规则验证数组值?

    我有一个创建以下 JSON 结构的表单 reviewed false title Just a title user UYV9TRKXfNW1NeCyFyfjZfagJ8B items age 33 experience Newcomer
  • 在 Laravel Blade 中检索外部 api 的数据

    public function RetrieveStatus response Http get https exemple exemple com fr api
  • 在这种情况下,一般异常处理不是那么糟糕吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在下面的代码中 我尝试发送一组通知 我想知道通知是否已成功发送 稍后将其放入数据库中 这样就不再发送它 我抓到了是不是很糟糕Exception这
  • Django - 检查用户是否对每个网址进行了身份验证

    在我的 html 上 我可以使用以下语法检查用户是否已登录 if user is authenticated div div else p Please Log in p endif 但是 如果我想检查我正在渲染的每个 html 文件的用户
  • “调用/应用”和“绑定”之间有什么区别[重复]

    这个问题在这里已经有答案了 var obj x 81 getX function console log this x var getX obj getX bind obj use obj as this getX 81 var getX
  • HttpDelete 中的 setEntity

    HttpDelete 是否包含 setEntity 等方法 如 HttpPost 或 HttpPut 当我使用 HttpPost 时 我会做这样的事情 httppost setEntity new UrlEncodedFormEntity
  • Rails 3 序列化问题

    我有一个在 ror 2 3 x 上运行良好的应用程序 我在升级到 Rails 3 时遇到序列化问题 代码看起来像这样 class PaymentTransaction lt ActiveRecord Base serialize respo
  • Spring Boot Actuator - 多个健康端点

    有没有办法在 Spring Boot 应用程序上支持多个健康端点 原因如下 标准执行器运行状况检查很棒 内置检查很棒 自定义选项很棒 对于单个用例 报告一般应用程序运行状况 但我想要可以从 AWS Elastic Load Balancer
  • 如何在 iPhone/Mac 上使用 CoreAudio 合成声音

    我想在 iPhone 中播放合成声音 我不想使用预先录制的声音并使用 SystemSoundID 来播放现有的二进制文件 而是对其进行合成 部分原因是我希望能够连续播放声音 例如 当用户的手指位于屏幕上时 而不是一次性的声音样本 如果我想合
  • PyMongo 的批量写入操作功能与生成器

    我想使用 PyMongo 的bulk http api mongodb org python current examples bulk html执行写操作的写操作功能 分批进行 以减少网络往返次数并提高吞吐量 我还发现here http
  • SQL 2008 - INFORMATION_SCHEMA 视图中的外键约束

    我正在编写一个 C 单元测试 用于根据目标数据库 始终是 SQL 2008 以及数据映射到的类来验证 ORM 类的字符串属性 检查指定的外键在数据库中是否有效很容易 static private bool ConstraintExsits