5

如果我有以下这些表格:

球员

ID    Name
==    ===========
1     Mick
2     Matt

教练员

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

我在下面有一个脚本来查找所有包含“名称”列的表:

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

如何从上面查询返回的两个表中选择所有行?

4

2 回答 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这里使用,因此所有具有nameas 列的表都具有相同的结构是很重要的。

从http://msdn.microsoft.com/en-us/library/ms188001.aspx了解有关动态 sql 的更多信息

于 2013-06-18T04:03:33.847 回答
-2
SELECT p.Id,p.Name,c.Id,c.Name
FROM Players p JOIN Coaches c
ON p.Id=c.Id

可能这可以帮助你。

于 2013-06-18T03:19:56.210 回答