0

70 ~ 80 列のテーブルがいくつかあります。キー違反などでできない場合を除いて、ランダムなデータを入力したいと思います。

最初のステップは、すべてのヘッダーのリストを取得することです。次の 2 つの方法があるようです。

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 つの異なるテーブルが返されますが、2 番目のテーブルにのみ関心があります。2 番目のテーブルの列は次のとおりです。

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

Column_nameとだけに興味があるTypeかもしれませんが、他の列かもしれません。

だから... sp_helpはおそらくたくさんのクエリを実行するので... どうすれば内部に入ることができますか? 2 番目のクエリを実行して、関心のある列の数を絞り込むにはどうすればよいですか?

どうもありがとう!

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 のデータ型が必要かどうかはわかりません。テーブルが 1 つだけ必要か、すべてが必要な場合は、必要に応じて変更できます。

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 に答える