Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式在SQLServer2005数据库中查找多对多关系_C#_Sql Server_Sql Server 2005_Code Generation_Metadata - Fatal编程技术网

C# 如何以编程方式在SQLServer2005数据库中查找多对多关系

C# 如何以编程方式在SQLServer2005数据库中查找多对多关系,c#,sql-server,sql-server-2005,code-generation,metadata,C#,Sql Server,Sql Server 2005,Code Generation,Metadata,我可以在c中找到直接表外键,如: foreach (ForeignKey key in CurrentTable.ForeignKeys) { Console.WriteLine("FK:" + key.ReferencedTable); } 多对多关系的经典表示是通过一个与两个主表具有一对多关系的中间表实现的,因此具有多对多关系的表之间没有直接链接 目前,我试图找到多对多关系检查,如果我正在分析的表只有两列,并且两列都是不同表的

我可以在c中找到直接表外键,如:

  foreach (ForeignKey key in CurrentTable.ForeignKeys) {
                    Console.WriteLine("FK:" + key.ReferencedTable);
          }
多对多关系的经典表示是通过一个与两个主表具有一对多关系的中间表实现的,因此具有多对多关系的表之间没有直接链接

目前,我试图找到多对多关系检查,如果我正在分析的表只有两列,并且两列都是不同表的外键,那么我将其识别为中间表

这不是最好的解决方案,因为有时中间表也包含其他列


以编程方式查找这个多个关系的最佳方法是什么?

作为附加标准,您可以使用以下事实:在许多情况下,两个外键的耦合表示联接/中间表的主键。

您似乎已经提出了自己的解决方案。不要搜索有两个外键引用其他不同表且没有其他列的表,只需删除短语且没有其他列即可


换句话说,查找具有引用其他不同表的两个外键的表。

此语句查找至少具有两个外键列的所有表

SELECT  objects_1.name AS Master1, objects_2.name AS Master2, sys.objects.name AS Detail, 
    sys.columns.name AS Column1, columns_1.name AS Column2
FROM sys.objects 
INNER JOIN sys.columns ON sys.objects.object_id = sys.columns.object_id 
INNER JOIN sys.foreign_key_columns ON sys.columns.column_id = sys.foreign_key_columns.parent_column_id 
    AND sys.columns.object_id = sys.foreign_key_columns.parent_object_id 
INNER JOIN sys.objects AS objects_1 ON sys.foreign_key_columns.referenced_object_id = objects_1.object_id 
INNER JOIN sys.columns AS columns_1 ON sys.objects.object_id = columns_1.object_id 
    AND columns_1.column_id <> sys.columns.column_id 
INNER JOIN sys.foreign_key_columns AS foreign_key_columns_1 ON columns_1.object_id = foreign_key_columns_1.parent_object_id 
    AND columns_1.column_id = foreign_key_columns_1.parent_column_id 
INNER JOIN sys.objects AS objects_2 ON objects_2.object_id = foreign_key_columns_1.referenced_object_id
WHERE     (sys.columns.is_nullable = 0) AND (columns_1.is_nullable = 0)
ORDER BY Master1, Detail, Master2

如果一个表有两个不同表的外键列,那么它肯定表示表之间的多对多关系。表具有其他列的事实仅意味着表实体之间的关系由额外的属性进一步限定。请看下图中的示例:

在上面的示例中,产品和账单之间存在多对多关系。交集表还将具有诸如“数量”、“礼品包装”等描述性属性。。这并没有消除一个事实,即首先存在一种多对多的关系。这些桌子看起来像这样

产品id、名称、单位重量、计量单位 账单编号、日期、金额、计量单位 BillItemsprod\u Id、BillNo、数量、礼物\u flg
为什么会被否决?虽然这是一段难看的代码,但最复杂的SQL是:-。不过,如果它解决了问题,它应该被投票支持。哎呀,我讨厌开车经过投票站!!谢谢我花了一些时间来组合查询,但我只是对解决一个难题感兴趣;