0

ステートメントを実行せずに、列名とそれぞれの値を SQL クエリから抽出する方法を知りたいと思いました。

例えば:

select * from table where fieldname = 'fieldvalue'

クエリから「FieldName」と「FieldValue」を抽出したい。

Insert into table (field,field2,field3) 
values ('fieldvalue','field2avlue','field3'svalue')

クエリから "field","field2" と "fieldvalue","field2avlue","field3'svalue" を抽出したいと考えています。

4

2 に答える 2

0

スティーブへの回答に基づいて、自分で解析することについて話しているのですか? 上記の「select *」の「*」のようなテーブルのメタデータを見て解決されるものがある場合、コードに基づいてそれを行うことはできません。テーブルのメタデータも必要です。ここで述べたことを実際に実行することについて話しているのであれば、DBMS 自体の主要なコンポーネントを再作成することについて話していることになります。スティーブが言ったように、それは大変な仕事です。

独自の SQL パーサーを作成しようとしているのではなく、実際にアプリケーション内のデータベースにアクセスできる場合、これは実際には非常に簡単です。発生するのも不当な問題ではありません.実行時間が膨大になる可能性のあるクエリや、その他の同様の制限を実行せずに、結果セットのメタデータを必要とする実際のアプリケーションが存在する可能性があります。

重要な実行時間を取得せずにメタデータを取得するには、関連するテーブルにロックを設定するなどして、失敗することが保証されているリテラル値から作成された where 句に述語を配置します。最新の DBMS はすべて、これを最適化して行が返されないようにするのに十分なほどスマートですが、結果を取得するためのほとんどの API は、とにかく結果セットのメタデータをキャプチャします。クエリを実行しますが、クエリは高速に実行され、何もロックされず、結果のメタデータが提供されます。

例:

select 
    <lots of stuff>
from
    <complicated subquery>
where 
    <there are a ton of predicates>
    AND 0=1

その最後の行は、結果がないことを保証するものです。

于 2012-12-06T19:26:11.450 に答える
0

私は@Sandra Waltersの提案を使用しています。つまり、その問題に対処する理想的な方法は、SQLクエリに含まれる前にフィールド値をクリーンアップすることです.SQLクエリが既に構築されました。

于 2012-12-10T17:33:47.180 に答える