SQL Server从查询返回的表中选择作为表名列表

5
如果我有以下这些表:
PLAYERS(玩家)
ID    Name
==    ===========
1     Mick
2     Matt

教练

ID    Name
==    ===========
1     Bill
2     Don

以下是我编写的脚本,用于查找所有具有名为"Name"的列的表:

SELECT t.name AS table_name FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE 'Name'

这将返回以下内容:

table_name
===========
PLAYERS
COACHES

如何选择返回的两个表中的所有行?

你期望的输出是什么? - sentil kumar
我想打印出两个表中的所有列,而不必逐个从给定查询结果中输入每个表的选择语句。您下面提供的解决方案就是我要避免的。 - Chris Wijaya
2个回答

9

您需要使用动态SQL,可以尝试以下方法:

declare @t table( tablename varchar(50))
declare @sql varchar(max)
set @sql = ''

insert into @t
SELECT t.name AS table_name FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE 'Name'

select @sql = @sql + 'Select * From ' + tablename + ' union ' from @t

--remove the trailing 'union'
Select @sql = substring(@sql, 1, len(@sql) - 6)

exec (@sql)

上述脚本创建并执行以下SQL语句。
select * from coaches
union
select * from players

由于我们在这里使用了union,因此很重要的一点是所有包含name列的表都具有相同的结构。

有关动态SQL的更多信息,请参见http://msdn.microsoft.com/en-us/library/ms188001.aspx


可以了,非常感谢!显然没有任何函数或其他东西将字符串链接到实际的SQL表。 - Chris Wijaya

-2
SELECT p.Id,p.Name,c.Id,c.Name
FROM Players p JOIN Coaches c
ON p.Id=c.Id

也许这可以帮助你。


谢谢您的回复,但这正是我不想要的。如果我有100个表格,我就不能每次输入每个条目。 - Chris Wijaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接