Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/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
Sql server 2005 SQL Server数据库中未定义的关系(外键)_Sql Server 2005_Foreign Key Relationship_Undefined Reference - Fatal编程技术网

Sql server 2005 SQL Server数据库中未定义的关系(外键)

Sql server 2005 SQL Server数据库中未定义的关系(外键),sql-server-2005,foreign-key-relationship,undefined-reference,Sql Server 2005,Foreign Key Relationship,Undefined Reference,我正在使用一个SQL Server数据库,该数据库包含近850个表。它有许多已定义的关系和大量未定义的关系(FK)、未定义的主键等。这是一个混乱。我无法访问应用程序源代码,因此无法通过代码跟踪未定义的关系 是否有任何软件或查询可以让我查看数据并找出表之间的关系?更具体地说,每个表中的每个字段(列)都映射(联接)到所有其他表的每个列,并向我提供某种报告。几乎60%的情况下,相关表中的列名相似,但许多表的主键具有相同的列名(例如item_id) 我需要所有那些让我的生活每天都很痛苦的未定义的关系!!

我正在使用一个SQL Server数据库,该数据库包含近850个表。它有许多已定义的关系和大量未定义的关系(FK)、未定义的主键等。这是一个混乱。我无法访问应用程序源代码,因此无法通过代码跟踪未定义的关系

是否有任何软件或查询可以让我查看数据并找出表之间的关系?更具体地说,每个表中的每个字段(列)都映射(联接)到所有其他表的每个列,并向我提供某种报告。几乎60%的情况下,相关表中的列名相似,但许多表的主键具有相同的列名(例如item_id)


我需要所有那些让我的生活每天都很痛苦的未定义的关系!!:(

我认为您最好的选择是使用探查器捕获正在执行的语句,并尝试从中推断关系。这是一个困难的问题,我知道没有任何简单的解决方案


祝你好运!

我想你最好的办法是使用探查器捕获正在执行的语句,并尝试从中推断关系。这是一个艰难的过程,我知道没有任何简单的解决方案


祝你好运!

好吧,你可以查询元数据-
信息\u模式。列
-过滤掉不太可能作为键连接的内容,如TEXT/NVARCHAR(MAX)。将其放在某种数据字典表中,从中开始用信息标记列

您可以使用以下内容进行查询:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS AS C
INNER JOIN INFORMATION_SCHEMA.TABLES AS T
    ON C.COLUMN_NAME = T.TABLE_NAME + '_ID';
看看是否有明显的匹配

这可能有助于你控制数据库,但这需要很多工作


在没有外键约束的情况下,他们甚至可能会执行“多键”之类的操作,其中某个列是一个表或另一个表的外键,具体取决于某种类型的类型选择器(外键约束不可能执行这些操作)-除了在单独的联接之间,您甚至可能在探查器中看不到这一点-因此,有时您可能会看到它联接到一个表,有时又联接到另一个表。

好的,您可以查询元数据-
信息\u架构。列
-过滤掉极不可能作为键联接的内容-例如TEXT/NVARCHAR(MAX)。将其放在某种数据字典表中,从中开始用信息标记列

您可以使用以下内容进行查询:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS AS C
INNER JOIN INFORMATION_SCHEMA.TABLES AS T
    ON C.COLUMN_NAME = T.TABLE_NAME + '_ID';
看看是否有明显的匹配

这可能有助于你控制数据库,但这需要很多工作


在没有外键约束的情况下,他们甚至可能会执行“多键”之类的操作,其中某个列是一个表或另一个表的外键,具体取决于某种类型的类型选择器(外键约束不可能执行这些操作)-除了在单独的联接之间,您甚至可能在探查器中看不到这一点-因此,有时您可能会看到它联接到一个表,有时又联接到另一个表。

同意当前的2个和(可能)所有后续答复。这是一个“精灵”问题:一旦您将精灵从瓶子中放出来(没有声明性引用完整性),很难把它放回瓶子里。同意当前的2个和(可能)所有后续的回答。这是一个“精灵”问题:一旦你让精灵从瓶子里出来(没有声明性引用完整性),很难把它放回瓶子里。这是一个由许多开发人员处理的巨大应用程序。我想我需要一年的时间才能完成单击应用程序中的所有按钮。我尝试了profiler并找到了一些链接,但大多数情况下我甚至无法找到与之关联的应用程序页面一个特定的数据库表。我是否可以在数据库中执行所有DML查询,而无需向所有表写入触发器?这是一个由许多开发人员处理的大型应用程序。我想我需要一年时间才能完成单击应用程序中的所有按钮。我已经尝试了profiler,并找到了一些e链接,但大多数情况下,我甚至无法确定哪个应用程序页与特定的数据库表相关联。我是否可以在数据库中执行所有DML查询,而无需向所有表写入触发器?谢谢Cade。我已经尽我所能尝试了列名匹配,并找出了最大值imum关系我可以。但我想把数据带到图片中。例如表A内部连接表B在A.product_id(int)=B.item_id(varchar(10)上,列名不同,但数据不一致。我想对850个表中的所有列合并一列,并对数据库中的所有列执行此操作。是否有任何简单的方法可以使用某种工具执行此操作。@需要\u嗡嗡声您当然可以对所有类似的数据类型字段进行代码比较,并获取每个字段的计数匹配的边和计数。但我知道没有工具。谢谢你,凯德。我已经尽我所能尝试了列名匹配,并找出了最大的关系。但我想将数据引入图片。例如,表A内部连接表B在A.product_id(int)=B.item_id(varchar(10)上,列名不同,但数据不一致。我想对850个表中的所有列合并一列,并对数据库中的所有列执行此操作。是否有任何简单的方法可以使用某种工具执行此操作。@需要\u嗡嗡声您当然可以对所有类似的数据类型字段进行代码比较,并获取每个字段的计数边和匹配计数。但我知道没有工具。