
syscolumns から 各フィールドごとのデータ型を取得して「数字」項目か「文字」項目か判断させたいのです。
要は Where句で使うパラメータにフィールドが「文字」項目であれば自動的に「'」を付与するようにしたいのです。
下記のSelect文でscaleがNULLにも関わらずタイプに「文字」と入りません、どうしてでしょうか
----------------------------------------------------------------
selectsc.name as フィールド名,sc.scale,case sc.scale when null then '文字' else '数字' end as タイプ
fromマスター管理_DB.dbo.sysobjects as so join マスター管理_DB.dbo.syscolumns as sc on so.id=sc.id
join マスター管理_DB.dbo.systypes as st on sc.xtype=st.xtype
whereso.type='V' and left(so.name,2)='K_' and LEFT(st.name,3)<>'sys'
----------------------------------------------------------------
(フィールド名) (scale) (タイプ)
勘定科目コード 0 数字
勘定科目名 NULL 数字(←「文字」になってほしい)
貸借 NULL 数字(←「文字」になってほしい)
計科目名 NULL 数字(←「文字」になってほしい)
----------------------------------------------------------------
また、日付(日時)を判断できる項目はないでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
・CASE文を以下の通り変更してください。
> case when sc.scale is null then '文字' else '数字' end as タイプ
CASE xxx WHEN の書式の場合、条件は「=」とみなされます。
フィールド=NULLはANSI標準では常にFalseです。
・また、おそらくこのままでは正しくでません。
(floatやrealが数字とみなされない)
私が書いたらこうするだろうというのを参考までに書きます。
なお、SQL Server 2008をお使いならば、sysobjects/syscolumnsでなく、sys.objects/sys.columnsを使った方がよいです。
SQL Server 2005のときから次バージョンではsysobjectsなどはサポートされない可能性があると言われていますので、
さすがに次のバージョンではなくなっているかもしれませんので。
select
sc.name as フィールド名,
case when type_name(sc.user_type_id)='timestamp' then 'その他'
when type_name(sc.user_type_id) like '%date%' then '日付'
when type_name(sc.user_type_id) like '%time%' then '日付'
when sc.precision<>0 then '数字'
when sc.collation_name is not null then '文字'
else 'その他' end as タイプ
from sys.objects as so
inner join sys.columns as sc on so.object_id=sc.object_id
where so.type='V' and left(so.name,2)='K_'
・日付を判断する項目はなく、上記の通り判別するしかなさそうです。
ただ、date,time,smalldatetime,datetime,datetime2,datetimeoffsetと全部拾えるでしょう。
「私が書いたらこうするだろうというの」をそのままいただきました。
内容は時間を書けて分析します。
ありがとうございました、これでゆっくり寝られます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
select文のwhere句に配列を入れ...
-
エクセルの関数について教えて...
-
入力値と外部キーをINSERTするには
-
PL/SQLの変数について
-
URL と行番号の指定
-
キー毎の、ある列のmaxのレコー...
-
SQLサーバから、項目の属性(型...
-
SQLで残高計算
-
武漢からのチャーター機
-
accessのチェックボックスをSQL...
-
MySQLのint型で001と表示する方...
-
複数テーブルからLIKE検索を行...
-
【Transact-sql】 execの結果を...
-
マイクラPC版のコマンドで効率...
-
”photo id” とは何ぞや?
-
SQLにて特定の文字を除いた検索...
-
所有格の意味
-
レコード削除・sqlインジェクシ...
-
このサイト(ttp://127.0.0.1/p...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エラー 1068 (42000): 複数の主...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
クエリ表示と、ADOで抽出したレ...
-
ストアドのエラーについて
-
マイクラPC版のコマンドで効率...
-
バインド変数について
-
SQLにて特定の文字を除いた検索...
-
副問合せの書き方について
-
【Transact-sql】 execの結果を...
-
”photo id” とは何ぞや?
-
mysql+phpをつかったカートつく...
-
MySQL5.5 viewの処理速度改善に...
-
select文のwhere句に配列を入れ...
-
テーブル名を省略して「h.id」...
おすすめ情報