データベース

データベースに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Microsoft SQL Server)
データ型およびディフォルト値を得たい
投稿日時: 17/10/31 09:07:36
投稿者: 富山の初心者

質問が2つあります。
 

 SELECT TBL.name
       ,COL.name
       ,COL.xtype
       ,COL.isnullable
       ,COL.length
       ,COL.id
       ,TBL.id
       ,COL.colorder
       ,COL.colid
   FROM syscolumns COL
   LEFT JOIN sysobjects TBL on COL.id= TBL.id
  WHERE TBL.name = 'Z1'
  Order by TBL.id
          ,TBL.name
          ,COL.colorder

途中省略

Debug.print strAdoDBRecordset.Fields(2).Value  'タイプ

  
上記SQL発行後
Debug.print strAdoDBRecordset.Fields(2).Value 'タイプ
をデバッグで参照すると数値が表示され、その数値より
たとえば、
61だとDatetime
106だとDecimal
167だとVarchar
175だとChar
というふうに、アイテムのデータ型がわかります。
 
質問1:上記SQLを修正して、
   直接、データ型を得るSQL修正案を教えてください。
   (数値ではなく、直接「Char」、「Decimal」を得たい)
 
質問2:テーブル定義時に、「ディフォルト」を設定できますが、
   そのディフォルト内容を取得するSQL修正案を教えてください。
 
よろしく、お願いします。
 
 
 
 

回答
投稿日時: 17/10/31 17:48:57
投稿者: mayu.

引用:
質問1:上記SQLを修正して、
   直接、データ型を得るSQL修正案を教えてください。
   (数値ではなく、直接「Char」、「Decimal」を得たい)

引用:
質問2:テーブル定義時に、「ディフォルト」を設定できますが、
   そのディフォルト内容を取得するSQL修正案を教えてください。

お使いになっている SQL-Server のバージョンが不明ですが
メタ情報の取得に カタログビューではなく
互換性ビューを指定されていることから
2000 でも実行可能な SQL文 を載せておきます。
------------------------------------------------
SELECT x.name
     , y.name
     , z.data_type
     , y.isnullable
     , y.length
     , y.id
     , x.id
     , y.colorder
     , y.colid
     , z.column_default
 FROM sysobjects                 x
    , syscolumns                 y
    , information_schema.columns z
WHERE x.id         =  y.id 
  AND y.name       =  z.column_name
  AND x.name       =  'Z1'
  AND z.table_name =  'Z1'
ORDER BY x.id
       , y.colid ;
------------------------------------------------
なお、データ型名は systypes( sys.types )の
name列を参照することでも取得可能です。
 
バージョン 2005 以降ですと
DEFAULT制約の取得には
sys.default_constraints の definition 列を参照したり
データ型名の取得は type_name関数 の利用も可能です。

投稿日時: 17/10/31 22:25:54
投稿者: 富山の初心者

mayu. 様 ありがとうございます。
 
御解答を参考に組み込んでみました。
 
想定通りに動作しました。
 
解決とさせていただきます。