Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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/21.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中动态地将一个表连接到多个其他表?_Sql_Sql Server_Dynamic Sql - Fatal编程技术网

如何在SQL Server中动态地将一个表连接到多个其他表?

如何在SQL Server中动态地将一个表连接到多个其他表?,sql,sql-server,dynamic-sql,Sql,Sql Server,Dynamic Sql,我目前正在使用下面的代码搜索数据库中所有具有特定子字符串的列名 SELECT t.name AS table_name, SCHEMA_NAME(schema_id) AS schema_name, c.name AS column_name INTO #Tables FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID WHERE c.

我目前正在使用下面的代码搜索数据库中所有具有特定子字符串的列名

SELECT 
    t.name AS table_name,
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name
INTO 
    #Tables
FROM
    sys.tables AS t
INNER JOIN 
    sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE 
    c.name LIKE '%foo%'
ORDER BY 
    schema_name, table_name;
我想获取这个查询返回的表名和列名,并将它们连接到另一个表中,如下所示

SELECT *
FROM #ReferenceTable rt
INNER JOIN #Tables.table_name t ON rt.ReferenceColumn = t.ColumnName

我相信这可以通过一个动态查询来实现,但我还没有弄清楚如何实现。我最初的想法是将一个表传递到sp_executesql,但我不确定这是否可行。将多个表名连接到另一个表的正确方法是什么?

如果需要编写动态SQL,我认为最简单的编写方法是可视化或实际写出查询需要的外观,如果查询不是动态编写的,并从中向后运行。我相信您可能正在寻找类似DECLARE@SQL NVARCHARMAX=;在rt.ReferenceColumn=t上选择@SQL+='SELECT*FROM ReferenceTable rt JOIN'+QUOTENAMETABLE_NAME+'t.+QUOTENAMECOLUMN_NAME+';'来自信息_SCHEMA.COLUMNS,其中列_的名称类似于“%foo%”;EXEC sp_executesql@SQL;或者对其进行一些修改?这里的逻辑是什么?您如何知道两个表需要联接,因为这两个表的名称中都有一个包含字符foo的列?您如何处理在给定表中查找2列或更多列的问题?您是否假设任何表都有一个且只有一个匹配的列名,并且返回的列可以基于此与任何其他表联接?以foo为例,如果列中有FootballTeam和FoodName,会发生什么?有很多方法可以打破这种局面。@SeanLange列名实际上是BusinessUnit。我正在直观地验证第一个查询返回的列是否就是我要查找的列。我有一个指定业务单元的中心表,因此我尝试验证所有其他表中的业务单元是否映射到中心表中的正确业务单元。另外,您如何知道将哪个表用作查询的主表?这真的需要动态吗?在需要继续查看每一列的位置添加新表的频率是多少?在我看来,几乎在任何情况下,从所需的表创建视图都是一种更好的方法。如果您有外键,那么您可以通过动态SQL系统化地执行此操作,只传递源表和目标表。如果没有外键,则还需要传递要连接的源列和目标列。你有外键吗?