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
Sql 查找我需要连接的所有表以获得两个表之间的关系_Sql_Sql Server_Join_Sql Server 2012 - Fatal编程技术网

Sql 查找我需要连接的所有表以获得两个表之间的关系

Sql 查找我需要连接的所有表以获得两个表之间的关系,sql,sql-server,join,sql-server-2012,Sql,Sql Server,Join,Sql Server 2012,我正在使用SQL Server 2012。我想连接两个没有列的表,我可以连接它们,我如何找到所有的表来连接这两个表 例如:我需要将表A连接到表D,为此我需要将A连接到B,然后连接到C,最后连接到D 我的问题是:我是否可以在数据库中数千个表中找到B和C,而不必逐表搜索 非常感谢, Ohad您可以做一些事情来帮助您的事业,但在大多数情况下,没有直接的方法,您需要了解数据库的结构和表的用途。此外,基于数据库的设计,您可能很难直观地找到答案,您可能只需要从熟悉数据库设计的人那里获得指导。不管: 表格A和

我正在使用SQL Server 2012。我想连接两个没有列的表,我可以连接它们,我如何找到所有的表来连接这两个表

例如:我需要将
表A
连接到
表D
,为此我需要将
A
连接到
B
,然后连接到
C
,最后连接到
D

我的问题是:我是否可以在数据库中数千个表中找到
B
C
,而不必逐表搜索

非常感谢,
Ohad

您可以做一些事情来帮助您的事业,但在大多数情况下,没有直接的方法,您需要了解数据库的结构和表的用途。此外,基于数据库的设计,您可能很难直观地找到答案,您可能只需要从熟悉数据库设计的人那里获得指导。不管:

表格A和D中的字段: 您可以查看表中的主字段或唯一字段,以确定哪些其他表可能链接到这些表。通常,它们的命名方式与其他表相匹配,您可以知道它们来自哪个表

信息\u架构视图 您可以使用information_schema.tables和information_schema.column视图在整个数据库中轻松搜索表和列的名称,并将搜索范围缩小到较少的表。

假设:

  • 您希望自动执行此过程
  • 您可以依赖外键约束
  • 你应按以下步骤进行:

  • 查询sys.foreign_键并创建包含表之间链接的有向图结构
  • 然后实现一个从表a开始的图搜索算法,并尝试查找到表D和从D到a的路径
  • 一旦找到路径,就可以很容易地构造包含路径上所有表的联接的动态SQL。您还需要查询sys.foreign\u key\u列,以便能够构造联接的ON子句

  • 如果您需要有关更多详细信息的帮助,请告诉我。

    添加一些示例表数据和预期结果。(对于所有1000个表来说……可能是一个设计问题!)两个任意表之间完全可能(通常)存在多个外键和路径。因此,没有一种方法可以找到“表之间的路径”。“我不知道有什么方法可以做到这一点”是比“没有办法做到这一点”更安全的表达方式……因为通常有一种方法,你只是碰巧不知道而已!:)