我有一个带有很多表的SQL Server数据库(几个hundrends),它们彼此之间有某种联系。它们都有主键( GUID ),但只有少数实际定义了外键约束。
我需要在任意列上找到与某个表相关的所有表(让我们称之为TargetTable)直接和不正确地(通过1,2或更多中间表)相关。
我的目标是获取SQL查询(每个相关表一个),在TargetTable和相关表之间加入所有表。
例如:发现5与TargetTable表相关:
我需要获得5个单独的JOIN。
它有任何SQL查询或软件或实用程序或任何方式来获得所需的SQL代码?或者甚至足以在一些方便的图形中获得关系,这样我就可以用我最喜欢的脚本语言解析它们并生成SQL代码。
答案 0 :(得分:3)
你当然可以通过循环遍历information_schema.columns或sys.columns来生成代码,但我怀疑它会像你想的那样工作。
如果他们懒得放入FK,那么他们可能已经做了一些其他可怕的事情......比如没有标准的命名约定或通用表。
您最好不要查看数据库中的SQL查询/过程以查看大多数关系的位置......那么您必须自己决定表是否相关。
答案 1 :(得分:0)
您可以使用SQL Server Management Studio同时拥有带有数据库图表的图表(不理想但有用)https://www.mssqltips.com/sqlservertip/1816/getting-started-with-sql-server-database-diagrams/,您可以使用查询设计器获取SQL并加入(仍在SSMS中)https://www.mssqltips.com/sqlservertip/1086/sql-server-management-studio-query-designer/ < / p>
希望得到这个帮助,
答案 2 :(得分:0)
您无法仅根据表格推断关系。要做到这一点,您需要了解域名。例如,假设您有两个表,T1包含和int字段X,T2具有int字段Y.然后在T1和T2的行之间存在关系R,其中(r1,r2)在R中当且仅当r1.x = r2.y。
因此,我建议您使用您对域的知识构建模型(例如ER模型)。然后手动添加外键约束。