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持つすべてのテーブルnameが同じ構造であることが重要です。

動的 SQL の詳細については、http://msdn.microsoft.com/en-us/library/ms188001.aspxを参照してください。

于 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 に答える