如何使用sp_help列出SQL Server表的列标题?
问题描述:
我有几张有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_name
和Type
,但也许其他列。
所以...因为sp_help可能运行了一堆查询......我该如何得到隐藏?如何运行第二个查询并筛选我感兴趣的列数?
非常感谢!
答
试试这个:
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