3

以下のようなSQL文がある場合

SELECT * FROM myTable WHERE CID = :vCID AND DataType = :vDataType

そして通常、TQueryを使用して以下のようなデータを取得します

aQuery.ParamByName('vCID').Value := '0025';
aQuery.ParamByName('vDataType').AsInteger := 1;

しかし、「CID」キーを無視してSQLのようなものを取得するにはどうすればよいですか

SELECT * FROM myTable WHERE DataType = :vDataType

以下のsynctaxを試しましたが、失敗しました

aQuery.ParamByName('vCID').Value := '%';
aQuery.ParamByName('vDataType').AsInteger := 1;

私を助けてください、ありがとう。

4

3 に答える 3

8

クエリを次のように変更します

SELECT * FROM myTable 
WHERE CID = ISNULL(:vCID,CID) AND DataType = ISNULL(:vDataType,DataType)

また

SELECT * FROM myTable 
WHERE COALESCE(CID,'') = COALESCE(:vCID,CID,'') 
  AND COALESCE(DataType,0) = COALESCE(:vDataType,DataType,0)

2 番目のものは、テーブル内の NULL 値のケースも処理します。

使用したくないパラメーターを設定できますUnassigned

aQuery.ParamByName('vCID').Value := Unassigned; // <<
aQuery.ParamByName('vDataType').AsInteger := 1;

:vCid は NULL であるため、次のように評価されます。CID = CID

于 2013-07-25T15:59:56.707 に答える
5

最良のオプションは、単純に個別のクエリを使用することです。

aQueryBoth.SQL.Text := 'SELECT * FROM myTable WHERE CID = :vCID AND DataType = :vDataType';
...
aQueryBoth.ParamByName('vCID').Value := '0025';
aQueryBoth.ParamByName('vDataType').AsInteger := 1;

aQueryDataType.SQL.Text := 'SELECT * FROM myTable WHERE DataType = :vDataType';
...
aQueryDataType.ParamByName('vDataType').AsInteger := 1;
于 2013-07-25T19:00:21.600 に答える