当前位置: 首页 > 知识库问答 >
问题:

SQL Server:如何确定table1.col1是否对table2.col2具有外键约束[重复]

钱华晖
2023-03-14

给定table1.column1,我需要确定它是否有table2.column2的外键。

这个SQL将运行很多次,所以它需要相当快。

我见过一些解决方案,但是往往比我需要的更复杂(例如,数据库中的所有外键或表上的所有外键)

谢谢!

共有1个答案

岳杜吟
2023-03-14

下面是我更喜欢使用的查询,做成一个视图:

CREATE VIEW vwForeignKeys AS
SELECT
   OBJECT_NAME(f.parent_object_id) TableName,
   COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName,
   OBJECT_NAME (f.referenced_object_id) ReferencedTableName,
   COL_NAME(fc.referenced_object_id,fc.referenced_column_id) ReferencedColName,
   f.Name
FROM
   sys.foreign_keys AS f
INNER JOIN
   sys.foreign_key_columns AS fc
     ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN
   sys.tables t
      ON t.OBJECT_ID = fc.referenced_object_id

在您的例子中,查询看起来像这样

IF EXISTS(
   SELECT 1 
   FROM 
      vwForeignKeys 
   WHERE 
      TableName='table1' 
      AND ColName='column1' 
      AND ReferencedTableName='table2' 
      AND ReferencedColName='column2'
) THEN 
BEGIN
   --FOREIGN KEY EXISTS, DO SOMETHING
END
 类似资料:
  • 问题内容: 同一列可以对另一列具有主键和外键约束吗? 如果我尝试删除table1数据,这会成为问题吗? 谢谢。 问题答案: 这应该没有问题。考虑以下示例: 这些表现在包含: 现在我们可以成功删除这样的行: 但是,我们将无法删除以下内容: 如果我们使用选项定义了外键,那么我们将能够删除父项,并且所有子项都将被自动删除: 如果我们要重复之前失败的操作,则将删除其中的子行以及其中的父行:

  • mysql 5.7 外键约束 主表:部门表 从表:员工表 添加外键:从表 dep_id 关联 主表 id >[danger] CASCADE > 级联更新 主表数据更新从表会更新外键 级联删除 主表数据删除,从表会一起删除

  • 问题内容: 为什么没有一个 TRUNCATE 上工作?即使我知道了: 错误1701(42000):无法截断在外键约束中引用的表(。,CONSTRAINT FOREIGN KEY()参考。()) 问题答案: 您不能在上面应用FK约束的表(与相同)。 要变通解决此问题,使用这些解决方案之一。两者都存在破坏数据完整性的风险。 选项1: 消除约束 执行 手动删除现在 无处* 引用的行 * 创建约束 选项2

  • 主要内容:在创建表时设置外键约束,在修改表时添加外键约束,删除外键约束MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西

  • 注意 当前章节中涉及的配置一般适用于关系数据库。这里展示的扩展方法在你安装了关系数据库提供程序之后就能获得(由Microsoft.EntityFrmeworkCore.Relational 程序包共享)。 外键约束是为模型中的关系引入的。 惯例 按照惯例,外键约束命名为 FK_<依赖实体类型名称>_<主实体类型名称>_<外键属性名称>。对于组合键,<外键属性名> 则为用下划线分隔的外键属性名。 数

  • 问题内容: 如果我有rdd,我如何理解数据为key:value格式?有没有办法找到相同的东西-像type(object)告诉我对象的类型。我试过了,但这只是说。 假设我有一个类似的数据,我使用 和得到了。有没有一种方法可以将x和y定义 为键和值?还是键必须是单个值?我注意到,如果我使用和函数来获取数据,那么将这些数据定义为键值对变得容易得多 问题答案: Python是一种动态类型化的语言,PySp