c# - 如何检查列是否已经是外键?

标签 c# sql mysql

我有一个名为 Person 的表和一个名为 ID 的列 如何检查 ID 是否已经是 FOREIGN KEY 因为我想用这段代码来实现它:

ALTER TABLE Person ADD FOREIGN KEY(ID) REFERENCES Job(ID)
ON DELETE CASCADE ON UPDATE CASCADE

但是如果 ID 已经是一个 FOREIGN KEY,它会给出以下错误“可能导致循环或多个级联路径”,因为有两个级联的条件......如何检查这个字段是否是 FOREIGN KEY 以避免这个错误?

最佳答案

您想查看INFORMATION SCHEMA View

虽然它没有它应该的那么完整。这是您想要的最终查询:

SELECT 
     KCU1.CONSTRAINT_NAME AS 'FK_CONSTRAINT_NAME'
   , KCU1.TABLE_NAME AS 'FK_TABLE_NAME'
   , KCU1.COLUMN_NAME AS 'FK_COLUMN_NAME'
   , KCU1.ORDINAL_POSITION AS 'FK_ORDINAL_POSITION'
   , KCU2.CONSTRAINT_NAME AS 'UQ_CONSTRAINT_NAME'
   , KCU2.TABLE_NAME AS 'UQ_TABLE_NAME'
   , KCU2.COLUMN_NAME AS 'UQ_COLUMN_NAME'
   , KCU2.ORDINAL_POSITION AS 'UQ_ORDINAL_POSITION'
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1
ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG 
   AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA
   AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2
ON KCU2.CONSTRAINT_CATALOG = 
RC.UNIQUE_CONSTRAINT_CATALOG 
   AND KCU2.CONSTRAINT_SCHEMA = 
RC.UNIQUE_CONSTRAINT_SCHEMA
   AND KCU2.CONSTRAINT_NAME = 
RC.UNIQUE_CONSTRAINT_NAME
   AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION

更多信息请看这里

http://msdn.microsoft.com/en-us/library/aa175805(v=sql.80).aspx

关于c# - 如何检查列是否已经是外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5067277/

相关文章:

c# - Listview win8 xaml如何创建列?

sql - 在 SQL Server 2008 中从一行设置多个标量变量?

mysql - MySQL 交叉联接查询上的 hibernate 异常

c# - 如何从 Access 表中获取一些数据以显示在 C# 中的文本框中?

java - Protobuf-net 与 Java UUID 和 C# Guid 互操作

c# - 无法将类型为 'System.String' 的对象转换为类型 'FileItem'

sql - postgresql函数错误: column name does not exist

Mysql 按两列进行分组,其中条件为第三列的最大日期

mysql - 重叠的时间间隔

php - 这段代码是否正确地从 Xcode 发布字符串并使用 php 将它们发布到 mysql 数据库