可能な限り最良の方法は、動的クエリを生成し、それを実行して必要な情報を取得することです。
クエリを生成するには、スキーマ情報関連のシステムテーブルを使用し、固定フォーマットテーブルでデータを供給することができます。すなわち、定義された列構造を有する固定フォーマットテーブルを作成する。それがデータのフィードに役立ちます。例えば :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
私はこれがあなたが探しているものだと思います。
各選択で選択された列の数が同じで互換性のあるデータ型 – GurV
の表構造を表示する必要があります。ユニオンはあなたが探しているものですが、列の順序でデータ型に不一致がある場合は機能しません。 – DarkKnight