ここには、カーソルと動的SQLに基づくソリューションがあります。私はテーブルのスキーマと列の名前を最終結果に含めましたが、質問はテーブル名、データ型、およびサンプルデータを要求します。
また、テーブル/列ごとに3行のサンプルデータを必要とするかどうか、または3列のサンプルデータで1つのテーブル/列に1つの行を追加するかどうかはわかりませんでした。私は前者と一緒に行きました、あなたが後でしたいのなら教えてください。私はサンプルデータを持たないテーブルのための "No data"インジケータを含めました。
SQL Server 2005でテストしましたが、2000と同様に動作するはずです。
Create Table #results
(id Integer Not Null Identity(1, 1)
,table_schema nVarChar(128) Not Null
,table_name nVarChar(128) Not Null
,column_name nVarChar(128) Not Null
,data_type nVarChar(128) Not Null
,sample_data nVarChar(max) Null);
Declare @table_name nVarChar(128)
,@table_schema nVarChar(128)
,@column_name nVarChar(128)
,@data_type nVarChar(128)
,@sql nVarChar(max)
,@inserted Integer;
Declare rs Cursor Local Forward_Only Static Read_Only
For Select
col.table_schema
,col.table_name
,col.column_name
,col.data_type
From INFORMATION_SCHEMA.COLUMNS col
Order By col.TABLE_CATALOG
,col.TABLE_SCHEMA
,col.TABLE_NAME
,col.ORDINAL_POSITION
Open rs;
Fetch Next From rs Into @table_schema, @table_name, @column_name, @data_Type;
While @@Fetch_Status = 0 Begin;
Set @table_schema = QuoteName(@table_schema);
Set @table_name = QuoteName(@table_name);
Set @column_name = QuoteName(@column_name);
Set @sql = N'
Insert Into #results
(table_schema
,table_name
,column_name
,data_type
,sample_data)
Select Top 3 ' + QuoteName(@table_schema, '''') + N'
,' + QuoteName(@table_name, '''') + N'
,' + QuoteName(@column_name, '''') + N'
,' + QuoteName(@data_type, '''') + N'
,' + @column_name + N'
From ' + @table_schema + N'.' + @table_name;
Exec (@sql);
Select @inserted = count(*)
From #results
Where table_schema = @table_schema
And table_name = @table_name
And column_name = @column_name;
If @inserted = 0
Insert Into #results (table_schema, table_name, column_name, data_type, sample_data)
Values (@table_schema, @table_name, @column_name, @data_type, ' -- No Data -- ');
Fetch Next From rs Into @table_schema, @table_name, @column_name, @data_Type;
End;
Close rs;
Deallocate rs;
-- Probably should include the schema and column name too:
Select table_schema, table_name, column_name, data_type, sample_data
From #results
Order by [id];
-- But this is what the question asked for:
-- Select table_name, data_type, sample_data
-- From #results
-- Order by [id];
Drop Table #results;
おそらくより洗練されたソリューションがありますが、これはあなたが始めているはずです。がんばろう!
@Quassnoi:T-SQLクエリですべてを提示してから、Excelにペーストをコピーしたいと思います。 –
私はこれまでT-SQL XMLコードスニペットを見てきましたが、今はそれを見つけることができません。 –