試試這個:
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在你需要的時候。
謝謝,現在...什麼是最好的方式來保存查詢作爲存儲過程?它應該將表格名稱作爲輸入。這樣做是個好主意嗎?我已經有了一堆SP,所以我想我會選擇一個非常獨特和特殊的名稱。也許'sp_help_columns'?再次感謝。 – 2010-03-29 21:13:45
從來沒有將您的程序命名爲「sp _...」,這些是爲sql服務器程序保留的...我將編輯一個程序... – 2010-03-29 21:16:07
非常好! 15個字符 – 2010-03-29 21:38:59