1

次のようなクエリを作成する必要があります。

SELECT PNPDeviceID FROM Win32_NetworkAdapter WHERE AdapterTypeId = 0

問題は、AdapterTypeId 列が常に存在するとは限らないことです。この場合、次のようにすべてが必要です。

SELECT PNPDeviceID FROM Win32_NetworkAdapter

私の WQL/SQL の知識は非常に限られています。単一のクエリでこれを行う方法を誰か教えてもらえますか?

編集:
もう少し背景が必要なようです: SQL のような構文を使用する WMI を使用して Windows にデバイス情報を照会しています。So, in my example, I am querying for network adapters that has a AdapterTypeId of 0.
ただし、その列は常に存在するとは限りません。つまり、返された値を列挙すると、「AdapterTypeId」がリストされません。

編集 2:
SQL を WQL に変更しました。明らかに、これはより正しいです。

4

4 に答える 4

5

基になるスキーマが信頼できないという意味だと思います。

これは非常に異例の状況です。列が常に存在するとは限らない原因となっている問題を解決することをお勧めします。アプリケーションの下でスキーマを動的に変更すると、(ほぼ確実に) 悲惨な結果になる可能性があるからです。

アップデート:

わかりました。WQL では、SQL に似た構文でオブジェクトをクエリできますが、SQL とは異なり、スキーマは足元で変更される可能性があります。これは漏れやすい抽象化の古典的な例であり、私は今まで使用したことがない WQL を嫌います :)。

利用可能なプロパティは流動的であるため、WQL は特定のアダプタのプロパティを列挙する方法を提供していると推測しています。これを行い、結果に応じて実行するクエリを選択します。

いくつかのグーグルの後、使用可能なプロパティを列挙する方法を示す例がここにあります。これを使用して、AdapterTypeId存在するかどうかを判断できます。

于 2010-03-11T12:43:18.537 に答える
2
SELECT PNPDeviceID FROM Win32_NetworkAdapter WHERE AdapterTypeId = {yourDesire} OR AdapterTypeId IS NULL
于 2010-03-11T12:43:44.450 に答える
0

このフィールドがテーブルにないということだと思います。このフィールドが存在するかどうか、クエリを送信する前に知っていますか? はいの場合は、SQL を動的に作成します。そうでない場合は、フィールドが欠落している場合に構文エラーが発生すると考えられます

于 2010-03-11T13:00:22.903 に答える
0

これは SQL に関する質問ではありません。SQL は、単一のテーブル ソース内のさまざまなスキーマを持つレコードを考慮しません。代わりに(あなたが言及したように)、これは「SQLのような」構文を使用する別のシステムです。クエリを実行しようとしている実際の製品を使用して質問を作り直すと、運が良くなります。その製品が可変レコード構造をどのように処理するかについては、ドキュメントで説明されている可能性があります。

于 2010-03-11T13:11:02.233 に答える