2016-12-05 3 views
0

私は自分の名前を特定の条件に一致するテーブルの内容を取得する必要があり、SQL Serverのコンテンツ

例えばのようなもの:

select id //lets assume that all of the tables have id column 
from (all tables that their names starts with 'p') 

ので、私の出力を除いては次のようになります:この要件は、あなたがmigh集中臭いという事実のほかに

のプロジェクト 'テーブル+ 24枚のレコードから、「人の記録などから

10レコード...

+2

EXEC前?実際に必要な場合は、動的SQLを使用します。 –

+4

これは、通常、*データ*としてモデル化されていたはずのものが*メタデータ*としてモデル化されている必要があることを示しています(たとえば、列名または表名内)。クエリの対象となるデータがクエリ可能な場所に配置されるようにモデルを修正する方が一般的です(例えば、*の列のデータ値*) –

+0

メタデータクエリをSQLで記述することはできますが、 (ID欄の値) –

答えて

1

、動的に作成されたSQLとEXECを使用します。 INFORMATION_SCHEMAから、あなたは非常に簡単にメタデータを得ることができます。クエリは名前がp

で始まる作成した文が

  SELECT 'Tbl1' AS TheTable,ID FROM [Tbl1] 
UNION ALL SELECT 'Tbl2' AS TheTable,ID FROM [Tbl2] 
UNION ALL SELECT ... 

のように見える、すべてのテーブルを取得する結果は、テーブル名とカラムidの値を含むリストになります。

あなたは離れて取ることができPRINT経由でコマンドを確認した後、この

DECLARE @sql NVARCHAR(MAX); 

SELECT @sql=STUFF 
(
    (
    SELECT ' UNION ALL SELECT ''' + TABLE_NAME + ''' AS TheTable,ID FROM ' + QUOTENAME(TABLE_NAME) 
    FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'p%' 
    FOR XML PATH('') 
    ),1,11,''); 

PRINT @sql; 
--EXEC(@sql); 

を試すことができ--あなたがこれを必要となぜ、奇妙な要件だ

+0

ありがとうございます! –