带可选列的WQL SELECT

时间:2010-03-11 12:41:22

标签: wmi wql

我需要进行这样的查询:

SELECT PNPDeviceID FROM Win32_NetworkAdapter WHERE AdapterTypeId = 0

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

SELECT PNPDeviceID FROM Win32_NetworkAdapter

我的WQL / SQL知识非常有限。任何人都可以告诉我如何在一个查询中执行此操作吗?

编辑:
似乎需要更多背景:我使用WMI查询Windows以获取设备信息,WMI使用类似SQL的语法。因此,在我的示例中,我正在查询AdapterTypeId为0的网络适配器 但是,该列并不总是存在,这意味着如果我枚举返回的值,则不会列出“AdapterTypeId”。

编辑2:
将SQL更改为WQL;显然这是更正确的。

4 个答案:

答案 0 :(得分:4)

我假设您的意思是底层架构不可靠。

这是一个非常不同寻常的情况。我建议您解决导致列不总是存在的问题,因为在应用程序下面动态更改架构可能(几乎肯定)是灾难性的。

更新:

好的,所以WQL允许您使用类似SQL的语法查询对象,但与SQL不同,架构可以在您的脚下进行更改。这是leaky abstraction的典型示例,我现在讨厌WQL而没有使用过它:)。

由于可用属性不断变化,我猜测WQL提供了一种枚举给定适配器属性的方法。执行此操作,并根据结果选择要运行的查询。

在一些谷歌搜索之后,有一个示例here,它显示了如何枚举可用的属性。您可以使用它来确定是否存在AdapterTypeId

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我认为您的意思是表中缺少此字段。 如果此字段存在,您在提交查询之前是否知道? 如果是,那么只需动态创建SQL,否则它会认为如果缺少字段

会出现语法错误

答案 3 :(得分:0)

这不是SQL问题。 SQL没有考虑在单个表源中使用不同模式的记录。相反(如你所述)这是一个使用“类SQL”语法的不同系统。如果您使用您尝试查询的实际产品重新构建问题,那么您将获得更好的运气,并且文档中可能会讨论该产品如何处理变量记录结构的信息。