- ベストアンサー
フィールドのデータ型を取得して判断したい
- syscolumnsから各フィールドごとのデータ型を取得し、数字項目か文字項目か判断させたい。
- Where句で使うパラメータにフィールドが文字項目であれば自動的に'を付与する。
- 日付(日時)を判断できる項目はあるか。
- みんなの回答 (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と全部拾えるでしょう。
お礼
「私が書いたらこうするだろうというの」をそのままいただきました。 内容は時間を書けて分析します。 ありがとうございました、これでゆっくり寝られます。