2010-03-11 2 views
0

мне нужно сделать запрос, как это:WQL ВЫБРАТЬ с дополнительной колонкой

SELECT PNPDeviceID FROM Win32_NetworkAdapter WHERE AdapterTypeId = 0 

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

SELECT PNPDeviceID FROM Win32_NetworkAdapter 

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

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

EDIT 2:
Изменен SQL на WQL; это более правильно.

+0

Какую базу вы используете? –

+0

Что вам мешает * столбец AdapterTypeId не всегда присутствует *. ** У вас есть параметр или фактический столбец? ** –

+0

Что значит «не всегда присутствует»? Вы используете запрос в нескольких версиях той же базы данных, где изменилась схема таблицы? – Kieveli

ответ

3

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

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

Update:

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

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

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

+0

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

+0

ОК, так что тогда не делайте этого в запросе. Спасибо за попытку! – 2010-03-11 13:39:36

2
SELECT PNPDeviceID FROM Win32_NetworkAdapter WHERE AdapterTypeId = {yourDesire} OR AdapterTypeId IS NULL 
0

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

0

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

Смежные вопросы