0

我有几张表,里面有 70-80 列。我想用一些随机数据填充它们,除非由于密钥违规等原因我无法这样做。

第一步是简单地获取所有标题的列表。似乎有两种方法:

A)select * from table_of_interest;在 MSFT SQL Server Management Studio 2008 中运行。现在,右键单击结果并单击“使用标题复制”。但是,我得到零行,当我尝试不复制任何内容+标题时,我得到:

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_nameand感兴趣Type,但可能对其他列感兴趣。

所以......因为 sp_help 可能会运行一堆查询......我该如何进入引擎盖?如何运行第二个查询并过滤掉我感兴趣的列数?

非常感谢!

4

1 回答 1

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

我不确定你是否想要not的数据类型,如果你想要一个表还是全部,你可以根据需要进行修改。

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有几个您可能感兴趣的列,因此请阅读文档并将查询修改为您需要的内容。

于 2010-03-29T21:08:19.483 回答