1

我需要进行这样的查询:

SELECT PNPDeviceID FROM Win32_NetworkAdapter WHERE AdapterTypeId = 0

麻烦的是,AdapterTypeId 列并不总是存在。在这种情况下,我只想要一切,就像这样:

SELECT PNPDeviceID FROM Win32_NetworkAdapter

我的 WQL/SQL 知识非常有限。谁能告诉我如何在单个查询中执行此操作?

编辑:
似乎需要更多背景知识:我正在使用 WMI 向 Windows 查询设备信息,它使用类似 SQL 的语法。因此,在我的示例中,我正在查询 AdapterTypeId 为 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 回答