簡體   English   中英

示例SQL數據

[英]Sample SQL Data

我想向我的BA團隊提出一個方案。

Select TABLE_NAME, col.DATA_TYPE
from INFORMATION_SCHEMA.COLUMNS col
order by col.TABLE_CATALOG, TABLE_NAME, TABLE_SCHEMA, col.ORDINAL_POSITION

我也想展示3行樣本數據,但我想將其透視一下,以便它們獲得包含以下3列的輸出:

  1. 表名
  2. 數據類型
  3. 樣本數據

我該如何透視這些數據?

這是基於游標和動態SQL的解決方案。 盡管問題只是詢問表名,數據類型和示例數據,但我還在最終結果中包括了表模式和列名。

另外,我不確定您是否要每個表/列三行樣本數據,還是要每個表/列三行樣本數據行。 我選擇了前者,請讓我知道是否需要后者。 我確實為沒有任何樣本數據的表添加了“無數據”指示符。

在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;

我想可能會有更多優雅的解決方案可用,但這應該可以幫助您入門。 祝好運!

您可以為每個表動態構建如下查詢:

SELECT  TOP 3 *
FROM    mytable
FOR XML AUTO

並在展示層中解析生成的XML

我使用XML PATH構建了它

SET NOCOUNT ON

SELECT 
    'SELECT ''' + col.TABLE_NAME + ''' AS TableName,' +
    '''' + col.COLUMN_NAME + ''' AS ColumnName,'+
    ' ''' +  col.DATA_TYPE + ''' as DataType,   '  +
    '
    (
        SELECT top 3 CONVERT (VARCHAR, p2.' + col.COLUMN_NAME + ') + '','' 
        FROM ' + col.TABLE_SCHEMA + '.' + col.TABLE_NAME + ' p2
        ORDER BY p2. ' +  col.COLUMN_NAME + '
        FOR XML PATH('''') 
    )
    UNION ALL'
FROM INFORMATION_SCHEMA.COLUMNS col
ORDER BY 
    col.TABLE_CATALOG, 
    col.TABLE_NAME, 
    col.TABLE_SCHEMA, 
    col.ORDINAL_POSITION

我將此查詢的結果復制粘貼到新的查詢編輯器窗口中。 我刪除最后一個UNION ALL並執行查詢。

它在返回的數據中給了我一個額外的逗號,但是我的文學士對此還可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM