2016-12-28 7 views
-2

すべてのテーブルからすべてのレコードを取得する方法(例:table1、table2、table3、... tableN)id = 1 (EX:database1)SQL Server 2008 R2MS SQL Server 2008 R2でID = 1のすべてのテーブルからすべてのレコードを取得する方法

1つのデータベースがあり、無限のテーブル(EXテーブル1、テーブル2、....、テーブルN)があるとします。だから、これは可能なすべてのレコードを取得することができます全体のデータベースid = 1各table.I事実それはSQLのinformation_schema.tableまたはinformation_schema.columnで可能ですが、私はこれを使用する方法がわかりません。

すべてのヘルプは..

+0

各選択で選択された列の数が同じで互換性のあるデータ型 – GurV

+0

の表構造を表示する必要があります。ユニオンはあなたが探しているものですが、列の順序でデータ型に不一致がある場合は機能しません。 – DarkKnight

答えて

0

を私は

Select C.NAME,C.ROLLNUMBER from TABLE1 C,TABLE2 A where C.ROLLNUMBER=A.ROLLNUMBER and id = 1 order by C.CIRCLENAME 

が、これはあまりにも働くことを願っていますDB2でこれを使用して、MySQLのの多くのアイデアを持っていない高度な

+0

ありがとうございました – Rizvi

0

感謝を高く評価しました文書化されていないsp_msforeachtableを使用できます。

sp_msforeachtable 
@command1 = 'SELECT * FROM ? WHERE id=1', 
@whereand = ' And Object_id In (Select Object_id From sys.columns Where name=''id'')' 

@ command1を照会します。疑問符は、ストアドプロシージャがテーブル名を挿入するために使用するプレースホルダです。

@whereandあなたは、テーブルを言及したい場合は、手動でこれを試してみてくださいID

0

という名前の列を持っているだけで、テーブルに検索を制限します。

SELECT COL1,COL2,COL3....COLN FROM TABLE1 WHERE ID=1 
UNION ALL 
SELECT COL1,COL2,COL3....COLN FROM TABLE2 WHERE ID=1 
UNION ALL 
SELECT COL1,COL2,COL3....COLN FROM TABLE2 WHERE ID=1 
: 
: 
: 
UNION ALL 

SELECT COL1,COL2,COL3....COLN FROM TABLEN WHERE ID=1 

注:COL1、COL2、COL3は...コルンは、上述のすべてのテーブルに同じデータ型でなければならない

このid = 1

SELECT STUFF((SELECT ' 
UNION ALL 
SELECT COL1,COL2,COL3..COLN FROM '+TABLE_NAME + ' WHERE ID=1 ' 
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' FOR XML PATH(''),type).value('.', 'NVARCHAR(MAX)'),1,11,'') 
を持つすべてのテーブルを動的に構築するため

注:テーブルには共通の列、つまりIDが必要です。必要に応じて列名を変更する必要がありますが、select文のすべての列はすべてのテーブルに含める必要があります。

0

可能な限り最良の方法は、動的クエリを生成し、それを実行して必要な情報を取得することです。

クエリを生成するには、スキーマ情報関連のシステムテーブルを使用し、固定フォーマットテーブルでデータを供給することができます。すなわち、定義された列構造を有する固定フォーマットテーブルを作成する。それがデータのフィードに役立ちます。例えば :TABLEIDシステム・テーブルからテーブルのIDであり、TABLEDATAは、いくつかの分離識別子を有するテーブルのすべてのカラムの連結値の文字列を含むことになる

CREATE TABLE AllTableData 
(
    TableId int, 
    TableName nvarchar(250), 
    TableData NVARCHAR(max), 
    SelectedId int 
) 

;WITH T AS 
(
    SELECT 
     T1.* 
    FROM 
     INFORMATION_SCHEMA.TABLES T1 
     INNER JOIN INFORMATION_SCHEMA.COLUMNS T2 ON T2.TABLE_NAME = T2.TABLE_NAME 
    WHERE 
     T2.COLUMN_NAME = 'Id' 
     AND T1.TABLE_TYPE='BASE TABLE' 
), 
DynamicQuery AS (
    SELECT 
     1 AS Id, 
     CONCAT(
      'SELECT ', QUOTENAME(T.TABLE_NAME,''''),' AS [TableName],', 
      CONCAT(' CONCAT(',STUFF((SELECT CONCAT(', [' , C.COLUMN_NAME,']') 
        FROM INFORMATION_SCHEMA.COLUMNS C 
        WHERE C.TABLE_NAME = T.TABLE_NAME 
       FOR XML PATH('')), 1, 1, ''),') AS [TableData]' 
       ) 
       ,', 1 AS [SelectedId] FROM ', T.TABLE_NAME,' WHERE Id = 1' 
      ) [FinalString] 
    FROM T 
) 
SELECT DISTINCT 
    STUFF((SELECT ' UNION ALL ' + DQ2.FinalString 
      FROM DynamicQuery DQ2 
      WHERE DQ2.Id = DQ1.Id 
      FOR XML PATH('')), 1, 10, '') [FinalString] 
FROM DynamicQuery DQ1 
GROUP BY DQ1.Id, DQ1.FinalString 

私はこれがあなたが探しているものだと思います。

関連する問題