2010-03-29 57 views
0

我有幾張有70-80列的表格。我想用稍微隨機的數據填充它們,除非由於密鑰違規等原因我無法這樣做。如何使用sp_help列出SQL Server表的列標題?

第一步只是簡單地獲取所有標題列表。似乎有兩種方法:

A)在MSFT SQL Server Management Studio 2008中運行select * from table_of_interest;。現在,右鍵單擊結果並單擊「帶標題的副本」。不過,我得到零行回來,當我試圖複製沒什麼+頭,我得到:

TITLE: Microsoft SQL Server Management Studio 
------------------------------ 

Value cannot be null. 
Parameter name: data (System.Windows.Forms) 

------------------------------ 
BUTTONS: 

OK 
------------------------------ 

這看起來像一個bug ......總之......還有另一種途徑。我可以運行sp_help table_of_interest;。但是,我最終得到了太多的回報。我得到7個不同的表,但我只對第二個表感興趣。第二個表中的列有:

Column_name | Type | Computed | Length | Prec | Scale | Nullable | 
TrimTrailingBlanks | FixedLenNullInSource | Collation 

我可能有興趣在短短的Column_nameType,但也許其他列。

所以...因爲sp_help可能運行了一堆查詢......我該如何得到隱藏?如何運行第二個查詢並篩選我感興趣的列數?

非常感謝!

回答

3

試試這個:

select 
    c.COLUMN_NAME ,c.DATA_TYPE ,c.CHARACTER_MAXIMUM_LENGTH,c.NUMERIC_PRECISION,c.NUMERIC_PRECISION_RADIX ,c.NUMERIC_PRECISION_RADIX,c.NUMERIC_SCALE,c.DATETIME_PRECISION 
     --t.TABLE_CATALOG,t.TABLE_SCHEMA,t.TABLE_NAME 
    from INFORMATION_SCHEMA.Tables   t 
     INNER JOIN INFORMATION_SCHEMA.Columns c ON t.TABLE_CATALOG=c.TABLE_CATALOG AND t.TABLE_SCHEMA=c.TABLE_SCHEMA AND t.TABLE_NAME=c.TABLE_NAME 
    WHERE t.TABLE_NAME='YourTableName' --<<<< 
    ORDER BY --t.TABLE_CATALOG,t.TABLE_SCHEMA,t.TABLE_NAME, 
     c.ORDINAL_POSITION 

我不知道,如果你想的不是數據類型,如果你只想一個表或全部,您可以根據需要進行修改。

編輯後OP的評論:

這裏的程序,如果你需要TABLE_CATALOG和TABLE_SCHEMA作爲必要的參數取消註釋:

CREATE PROCEDURE GetColumnNames 
(
    [email protected]_CATALOG nvarchar(128), 
    [email protected]_SCHEMA nvarchar(128), 
    @TableName sysname 
) 
AS 
select 
    c.COLUMN_NAME 
     ,CASE 
      WHEN DATA_TYPE IN ('int','smalldatetime','datetime','smallint','bigint')THEN DATA_TYPE 
      WHEN DATA_TYPE='char' THEN 'char('+CONVERT(varchar(5),CHARACTER_MAXIMUM_LENGTH)+')' 
      WHEN DATA_TYPE='varchar' THEN 'varchar('+CONVERT(varchar(5),CHARACTER_MAXIMUM_LENGTH)+')' 
      WHEN DATA_TYPE='numeric' THEN 'numeric('+CONVERT(varchar(5),NUMERIC_PRECISION)+','+CONVERT(varchar(5),NUMERIC_SCALE)+')' 
      WHEN DATA_TYPE='decimal' THEN 'decimal('+CONVERT(varchar(5),NUMERIC_PRECISION)+','+CONVERT(varchar(5),NUMERIC_SCALE)+')' 
      ELSE DATA_TYPE 
     END AS DataType 
     ,c.DATA_TYPE ,c.CHARACTER_MAXIMUM_LENGTH,c.NUMERIC_PRECISION,c.NUMERIC_PRECISION_RADIX ,c.NUMERIC_PRECISION_RADIX,c.NUMERIC_SCALE,c.DATETIME_PRECISION 
    from INFORMATION_SCHEMA.Columns c 
    WHERE [email protected] --AND [email protected]_CATALOG AND [email protected]_SCHEMA 
    ORDER BY c.ORDINAL_POSITION 

RETURN 0 
GO 

這樣使用它:

exec GetColumnNames 'yourtablename' 

INFORMATION_SCHEMA.Columns有幾列你可能會感興趣,所以閱讀文檔並修改查詢爲wh在你需要的時候。

+0

謝謝,現在...什麼是最好的方式來保存查詢作爲存儲過程?它應該將表格名稱作爲輸入。這樣做是個好主意嗎?我已經有了一堆SP,所以我想我會選擇一個非常獨特和特殊的名稱。也許'sp_help_columns'?再次感謝。 – 2010-03-29 21:13:45

+0

從來沒有將您的程序命名爲「sp _...」,這些是爲sql服務器程序保留的...我將編輯一個程序... – 2010-03-29 21:16:07

+0

非常好! 15個字符 – 2010-03-29 21:38:59

相關問題