我有几张桌子,里面有70-80列。我想用一些随机数据填充它们,除非由于密钥违规等原因我无法这样做。
第一步只是获取所有标题的列表。似乎有两种方式:
A)在MSFT SQL Server Management Studio 2008中运行select * from table_of_interest;
。现在,右键单击结果,然后单击“Copy With headers”。但是,我得到零行,当我尝试不复制任何+标题时,我得到:
TITLE: Microsoft SQL Server Management Studio
------------------------------
Value cannot be null.
Parameter name: data (System.Windows.Forms)
------------------------------
BUTTONS:
OK
------------------------------
这看起来像一个错误...无论如何......还有另一种方式。
B)我可以运行sp_help table_of_interest;
。但是,我最终得到了太多回报。我得到了7张不同的桌子,但我只对第二张桌子感兴趣。第二个表的列是:
Column_name | Type | Computed | Length | Prec | Scale | Nullable |
TrimTrailingBlanks | FixedLenNullInSource | Collation
我可能只对Column_name
和Type
感兴趣,但可能只对其他列感兴趣。
所以......因为sp_help可能会运行一堆查询......我如何进入引擎盖?如何运行第二个查询并过滤掉我感兴趣的列数?
非常感谢!
答案 0 :(得分: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
(
--@TABLE_CATALOG nvarchar(128),
--@TABLE_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 c.TABLE_NAME=@TableName --AND c.TABLE_CATALOG=@TABLE_CATALOG AND c.TABLE_SCHEMA=@TABLE_SCHEMA
ORDER BY c.ORDINAL_POSITION
RETURN 0
GO
像这样使用它:
exec GetColumnNames 'yourtablename'
INFORMATION_SCHEMA.Columns有几个您可能感兴趣的列,因此请阅读文档并将查询修改为您需要的内容。