WQL SELECT с необязательным столбцом - PullRequest
0 голосов
/ 11 марта 2010

Мне нужно сделать запрос, подобный этому:

SELECT PNPDeviceID FROM Win32_NetworkAdapter WHERE AdapterTypeId = 0

Проблема в том, что столбец AdapterTypeId не всегда присутствует. В этом случае я просто хочу все, вот так:

SELECT PNPDeviceID FROM Win32_NetworkAdapter

Мои знания по WQL / SQL крайне ограничены. Кто-нибудь может сказать мне, как сделать это в одном запросе?

EDIT:
Кажется, требуется немного больше информации: я запрашиваю у Windows информацию об устройстве с помощью WMI, которая использует синтаксис, подобный SQL. Итак, в моем примере я запрашиваю сетевые адаптеры, у которых AdapterTypeId равен 0.
Однако этот столбец присутствует не всегда, что означает, что если я перечислю все возвращаемые значения, то «AdapterTypeId» не будет указан.

РЕДАКТИРОВАТЬ 2:
Изменен SQL на WQL; очевидно, это более правильно.

Ответы [ 4 ]

4 голосов
/ 11 марта 2010

Я предполагаю, что вы имеете в виду, что базовая схема ненадежна.

Это очень необычная ситуация. Я предлагаю вам решить проблему, из-за которой столбец не всегда присутствует, поскольку динамическое изменение схемы под вашим приложением потенциально (почти наверняка) губительно.

Обновление:

ОК, поэтому WQL позволяет запрашивать объекты с SQL-подобным синтаксисом, но, в отличие от SQL, схема может меняться у вас под ногами. Это классический пример негерметичной абстракции , и теперь я ненавижу WQL, даже не используя его:).

Поскольку доступные свойства изменяются, я предполагаю, что WQL предоставляет способ перечисления свойств для данного адаптера. Сделайте это и выберите запрос для запуска в зависимости от результатов.

После некоторого поиска в Google есть пример здесь , который показывает, как перечислять доступные свойства. Вы можете использовать это, чтобы определить, существует ли AdapterTypeId или нет.

2 голосов
/ 11 марта 2010
SELECT PNPDeviceID FROM Win32_NetworkAdapter WHERE AdapterTypeId = {yourDesire} OR AdapterTypeId IS NULL
0 голосов
/ 11 марта 2010

Это не вопрос SQL. SQL не рассматривает записи с различными схемами в одном источнике таблицы. Вместо этого (как вы упоминаете) это другая система, использующая синтаксис типа «SQL». Вам повезет больше, если вы переделаете вопрос, используя фактический продукт, который вы пытаетесь запросить, и информация о том, как этот продукт взаимодействует со структурами переменных записей, вероятно, обсуждается в документации.

0 голосов
/ 11 марта 2010

Я предполагаю, что вы имеете в виду, что это поле отсутствует в таблице.Знаете ли вы перед отправкой запроса, существует ли это поле?Если да, тогда просто создайте SQL динамически, в противном случае вы получите синтаксическую ошибку в случае отсутствия поля

...