2011-06-28 17 views
1

フィールドデータ型がビットの場合は、表示するかどうかを指定する汎用SQLを書きたいと思っています。ここで私は私の上記のSQLにマニュアルは、ビット型のフィールドは、自動、半自動ですありデータ型がビットであれば、それは値0または1ビットデータ型のヘルプが必要

select stock_code,makeid,modelid,enginesize,automatic,semiautomatic,manual from VehicleInfoForParts 

に基づいはい表示またはまったくすべきデータの種類を確認する必要がありません。だからここで私ははい/いいえを表示する必要があるが、私はハードコード何もしたくない。 ジェネリックSQLステートメントの最適なアプローチは何ですか?

私は、ファイル名、値、およびデータ型を取得するために、information_schema.columnsというシステムテーブルとテーブルを結合することができます。 その結果は

Column_Name  Value    datatype 

------------- ------- --------------

ようになります

stock_code A112のVARCHAR

自動1ビット

半自動0ビット

手動1ビット

このタイプの出力は、私のsqlにinformation_schema.columnsを追加するだけです。可能であれば、私に上記のような出力を与える正しいSQLを提供してください。 ありがとう

をご参考ください。おかげ

答えて

1

ブール値のルックアップテーブルを作成します。

CREATE TABLE dbo.Boolean 
(
    Id bit PRIMARY KEY 
    , YesNo varchar(3) UNIQUE 
    , TrueFalse varchar(10) 
)  
INSERT INTO dbo.Boolean VALUES (0, 'No', 'False') 
INSERT INTO dbo.Boolean VALUES (1, 'Yes', 'True') 

次に、bit列ごとにブール表に結合します。

SELECT v.stock_code, v.makeid, v.modelid, v.enginesize 
    , a.YesNo automatic, s.YesNo semiautomatic, m.YesNo manual 
FROM dbo.VehicleInfoForParts v 
LEFT OUTER JOIN dbo.Boolean a ON a.Id = v.automatic 
LEFT OUTER JOIN dbo.Boolean s ON s.Id = v.semiautomatic 
LEFT OUTER JOIN dbo.Boolean m ON m.Id = v.manual 
2

あなたはそのためのケースを使用することができます:あなたは暗黙の型変換を使用することができます

select case bit_field when 1 then 'yes' else 'no' end as ColumnAlias 
... 
0

select stock_code,makeid,modelid,enginesize, 
     CASE WHEN automatic = 1 THEN 'Yes' ELSE 'No' END as automatic, 
     CASE WHEN semiautomatic = 1 THEN 'Yes' ELSE 'No' END as semiautomatic, 
     CASE WHEN manual = 1 THEN 'Yes' ELSE 'No' END as manual 
from VehicleInfoForParts 
1

を私はあなたのアプリケーションではなく、データベース内でこれを行うことをお勧めします。アプリケーションのオブジェクトにSQL Serverからデータをロードするときは、データベースのビット列に使用するフィールドのToStringメソッドでこれを処理します(そうでなければ.NETを使用すると仮定します)。