- PR -

SQLSqrverでDECIMAL型フィールドの整数桁数を取得したい

1
投稿者投稿内容
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 2006-04-03 18:36
いつもお世話になっております。SQLSERVER2005、WinXPです。

EXCEL2000VBAでSQLSERVER2005にアクセスし、ユーザーテーブルの
定義をEXCELのセルで一覧にするマクロを作成中です。
VBAのADOで

Rs.Fields(i).DefinedSize

という定義桁数を抜き出す関数があります。CHAR型に関しては
問題なく抜き出せてるのですが、DECIMALに関しては一律19桁(バイト)
になってしまいます。多分記憶領域のサイズを帰してるのだと思います。
有効桁数を返す関数は存在しないっぽいので、桁数を返す有効桁数を
返すSQLで対応しようと考えています。
しかしながら、system.culumnテーブルのlength(うろ覚え)で取ってきた値が
微妙に違うようなのです。使い方間違ってるのかとおもいます。

有効桁数を抜き出すSQL、もしくは他の対応方法をご存知の方が
いらっしゃいましたらよろしくご教授のほどお願いします。

鎌田
常連さん
会議室デビュー日: 2003/09/23
投稿数: 45
投稿日時: 2006-04-03 18:53
SQLServerには使ったことがありませんが、ADOXにはADOX.columnに precisionとNumericScale というプロパティが存在します。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-04-03 19:44
こんにちは。

SQL Server 2000 のときの手法ですが、syscolumns ビューを使えば有効桁数を取得できます。
http://msdn2.microsoft.com/ja-jp/library/ms186816.aspx
こんな感じです。

コード:

SELECT syscolumns.name AS 列名
, syscolumns.xprec AS 有効桁数
, syscolumns.xscale AS 小数点以下桁数
FROM syscolumns
LEFT OUTER JOIN sysobjects
ON syscolumns.id = sysobjects.id
WHERE sysobjects.name = N'テーブル名'



ただ、SQL Server 2005 ではカタログビューの使用が推奨されています。
上記のSQLも動作はしますが、カタログビューの sys.columns を使用するように書き換えた方が良いかもしれません。

[ メッセージ編集済み 編集者: ue 編集日時 2006-04-03 19:46 ]
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 2006-04-04 10:46
鎌田様、ue様、ご返答ありがとうございます。
両方の方法を試してみたところ、どちらでもほしい情報が
取得できました。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)