4

CREATE TABLE ステートメントで使用できる方法で、INFORMATION_SCHEMA.COLUMNS からデータ型を取得するスマートな方法が必要です。_問題は、NUMERIC PRECISION や NUMERIC _SCALEなど、理解する必要がある「余分な」フィールドです。

明らかに、INTEGER (精度 10、位取り 0) の列は無視できますが、NUMERIC など、他にも関心のある型があります。テーブルを解析するためのコードをたくさん書かなくても、列定義から一種のフィールド省略形を取得する方法についてのアイデアはありますか?

次のようなものを取得できるようにしたい: int, datetime, money, numeric**(10,2)**

4

4 に答える 4

7
select column_type = data_type + 
    case
        when data_type like '%text' then ''
        when data_type like '%char' and character_maximum_length = -1 then '(max)'
        when character_maximum_length is not null then '(' + convert(varchar(10), character_maximum_length) + ')'
        when data_type = 'numeric' then '(' + convert(varchar(10), isnull(numeric_precision, 18)) + ', ' + 
            convert(varchar(10), isnull(numeric_scale, 0)) + ')'
        else ''
    end
,*
from information_schema.columns
于 2008-10-31T12:50:16.893 に答える
5

これは、いくつかの問題を修正し、すべての(私が思うに)SQL Server 2008R2データ型を更新するためのGalacticCowboyの回答の更新(ぼったくり!)です。

select data_type + 
    case
        when data_type like '%text' or data_type in ('image', 'sql_variant' ,'xml')
            then ''
        when data_type in ('float')
            then '(' + cast(coalesce(numeric_precision, 18) as varchar(11)) + ')'
        when data_type in ('datetime2', 'datetimeoffset', 'time')
            then '(' + cast(coalesce(datetime_precision, 7) as varchar(11)) + ')'
        when data_type in ('decimal', 'numeric')
            then '(' + cast(coalesce(numeric_precision, 18) as varchar(11)) + ',' + cast(coalesce(numeric_scale, 0) as varchar(11)) + ')'
        when (data_type like '%binary' or data_type like '%char') and character_maximum_length = -1
            then '(max)'
        when character_maximum_length is not null
            then '(' + cast(character_maximum_length as varchar(11)) + ')'
        else ''
    end as CONDENSED_TYPE
    , *
from information_schema.columns
order by table_schema, table_name, ordinal_position
于 2012-06-27T20:03:41.633 に答える
1

smo を使用している場合は、Column オブジェクトの Properties コレクションにアクセスすることで、精度とスケールの両方を取得できます。

列.プロパティ["数値スケール"].値

Column.Property["NumericPrecision"].Value

于 2009-01-19T10:19:21.460 に答える
1

SMO スクリプティングは、スクリプトの生成を処理する必要があります。これは、MS がスクリプト生成のために SQL Management Studio で使用しているものだと思います。

http://msdn.microsoft.com/en-us/library/ms162153.aspx

@あなたのコメント -I need a smart way to get the data types out of INFORMATION_SCHEMA.COLUMNS in a way that could be used in a CREATE TABLE statement

これはあなたが求めたものです。それ以外では、情報スキーマ ビューの結果を解析する必要があります。

于 2008-10-31T12:31:27.290 に答える