SQL Server:根据条目表和ID动态创建查询以选择数据库中的所有相关数据

SQL Server:根据条目表和ID动态创建查询以选择数据库中的所有相关数据,sql,sql-server,database,recursion,Sql,Sql Server,Database,Recursion,我的任务是创建一个SQL语句,它将创建并运行?多个其他查询,将选择从给定ID uniqueidentifier和给定表名传出的所有相关数据 它不必那么快,但是只要给定1个ID和表名,它应该能够针对每个db使用 在数据库中,有一些1:n、n:m等关系,并且不是每个表都有一个名为Id的列,有些表只有外键,并且必须是完全动态和通用的 我试图自己实现这一点,但我不太擅长SQL,我还尝试了一些其他脚本,这些脚本将返回主外键关系,但我被困在那里,所以我想你们可能会帮助我: 要返回,我需要最好的生成查询,我可

我的任务是创建一个SQL语句,它将创建并运行?多个其他查询,将选择从给定ID uniqueidentifier和给定表名传出的所有相关数据

它不必那么快,但是只要给定1个ID和表名,它应该能够针对每个db使用

在数据库中,有一些1:n、n:m等关系,并且不是每个表都有一个名为Id的列,有些表只有外键,并且必须是完全动态和通用的

我试图自己实现这一点,但我不太擅长SQL,我还尝试了一些其他脚本,这些脚本将返回主外键关系,但我被困在那里,所以我想你们可能会帮助我:

要返回,我需要最好的生成查询,我可以对数据库运行这些查询,并获得返回的所有信息。还有其他好的返回可能性吗

或者,我可以用C语言创建这个项目,但我也被困在尝试中


我将非常感谢您提供的任何帮助:

以下内容将生成一组查询,然后将这些查询粘贴到SSM中并执行

您需要指定感兴趣的表、列和id值

还要注意的是,这可能需要调整以使用模式等。我确信,您可以使用游标执行返回的SQL,但这将使您走上正确的轨道,我认为:

DECLARE @idvalue int = 1
DECLARE @colName nvarchar(max) = 'myid'
DECLARE @tableName nvarchar(max) = 'Table_1'

DECLARE @tmp_Accounts TABLE (
PKTABLE_QUALIFIER sysname
,PKTABLE_OWNER sysname
,PKTABLE_NAME sysname
,PKCOLUMN_NAME sysname
,FKTABLE_QUALIFIER sysname
,FKTABLE_OWNER sysname
,FKTABLE_NAME sysname
,FKCOLUMN_NAME sysname
,KEY_SEQ smallint
,UPDATE_RULE smallint
,DELETE_RULE smallint
,FK_NAME nvarchar(max)
,PK_NAME nvarchar(max)
,deferrability smallint
)

insert into @tmp_Accounts exec sp_fkeys @tableName

select 
    'select * from ['+FKTABLE_NAME+'] where ['+FKCOLUMN_NAME+'] = '  
         + cast(@idvalue as nvarchar(max)) 
from 
    @tmp_Accounts 
where 
    PKCOLUMN_NAME = @colName
还请注意,您需要根据所选id调整数据类型

例如

SQLFiddle-获取要执行的查询:

SQLFiddle-执行返回的查询:

示例数据、表格结构和所需输出?您尝试过什么?您的模式是什么样子的?你真的了解SQL或LINQ吗?我没有样本数据。想象一下任何数据库结构。我有多个表,它们是相关的,有些多,有些少。给定的是特定表中特定列的ID。为此,我需要找到所有相关数据。而对于相关数据,相关数据等等。我认为,最好的输出应该是可以针对db运行的查询。我尝试了一些脚本,这些脚本将返回主外键关系,并尝试以此来完成任务,但我不能。@Sippy我尝试生成一个将所有信息连接在一起的查询,该查询无法正常工作,因为查询中的表名有多个定义,我无法处理,因为pc不知道当多次出现时,我还尝试为每个表的每一行生成一个查询,但它没有按预期工作,可能是因为我不太擅长sql,我知道sql、MySQL、LINQ select/insert/update和大多数连接的基础知识,但我显然不是专家谢谢!我试了一下,看起来不错!我将在C中实现并测试它,然后如果它工作正常,我将给出反馈:您需要添加很多内容以使其健壮-例如,如果它在id列与外键中使用的列不同的情况下工作会更好。此外,这对不直接引用特定表的多对多关系等也没有任何作用,因为您需要做一些通过链接表递归的更有趣的事情。