Sql server SCCM报告返回服务器上的KB状态
我试图在SCCM中创建一个自定义报告,该报告将告诉我是否在服务器池中安装了特定的KB,并返回一个二进制答案(在本例中,是或否) 我的问题是我不能让它返回一个KB的状态。我正在运行这个:Sql server SCCM报告返回服务器上的KB状态,sql-server,tsql,ssrs-2008,sccm,Sql Server,Tsql,Ssrs 2008,Sccm,我试图在SCCM中创建一个自定义报告,该报告将告诉我是否在服务器池中安装了特定的KB,并返回一个二进制答案(在本例中,是或否) 我的问题是我不能让它返回一个KB的状态。我正在运行这个: SELECT SYS.Name0 'Computer', SYS.operatingSystem0 'OS', UIN.Title 'Update', CASE WHEN UIN.Title LIKE '%KB3092627%' THEN 'Yes' ELSE 'No' END 'KB Ins
SELECT
SYS.Name0 'Computer',
SYS.operatingSystem0 'OS',
UIN.Title 'Update',
CASE
WHEN UIN.Title LIKE '%KB3092627%' THEN 'Yes'
ELSE 'No'
END 'KB Installed'
FROM v_R_System SYS
INNER JOIN v_UpdateComplianceStatus UCS ON SYS.ResourceID = UCS.ResourceID
INNER JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID
WHERE SYS.operatingSystem0 LIKE '%Server 2008%'
ORDER BY SYS.Name0
但是,对于每个SYS.Name0
,我都会得到数百个结果,每个检测到的更新都会得到一个结果。对于已安装的KB
,所有非所需KB的更新记录的值均为'No'
,但它们仍在列表中。我尝试了选择DISTINCT
以查看是否得到了不同的结果,但没有
我想要的是确定知识库是否存在,并返回是否存在。我觉得我甚至没有用这段代码问“是否安装了”这个基本问题,但是我想不出一种不同的方法来问这个问题。这是我应该在Report Builder中而不是在查询中做的事情吗?免责声明:我没有在代表性数据集上测试过这一点,因为您没有提供数据集,但我认为这应该满足您的要求:
SELECT DISTINCT
s1.Name0 'Computer',
s1.operatingSystem0 'OS',
CASE WHEN matches.Computer IS NULL THEN 'No' ELSE 'Yes' END 'KB Installed'
FROM v_R_System s1
LEFT JOIN
(
SELECT s2.Name0 'Computer',
FROM v_R_System s2
INNER JOIN v_UpdateComplianceStatus UCS ON s2.ResourceID = UCS.ResourceID
INNER JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID
WHERE UIN.Title LIKE '%KB3092627%'
) AS matches ON s1.Name0 = matches.Computer
WHERE s1.operatingSystem0 LIKE '%Server 2008%'
ORDER BY s1.Name0
因此,这将有效地返回所有计算机的不同列表,并将其左连接到每个给定计算机的有问题更新的just记录的结果集。因此,当从左联接返回的字段为NULL
时,更新尚未安装,反之亦然
为了回答您的问题,我个人认为在查询中这样做(而不是在您的报告中这样做)是很好的-我会在这里这样做。请在下面运行此查询:
选择DISTINCT
SYS.Name0“计算机”,
SYS.Operating\u System\u Name\u和0“OS”,
UIN.标题“更新”,
案例
当UIN.Title如“%KB3079343%”时,则为“是”
否则“不”
结束“KB已安装”
来自v_R_系统系统
在SYS.ResourceID=UCS.ResourceID上左连接v_UpdateComplianceStatus UCS
在UCS.CI\u ID=UIN.CI\u ID上左连接v\u UpdateInfo UIN
其中UIN.Title类似于“%KB3079343%”
按SYS.Name0下单
正在进行,非常感谢!我在这个问题上完全陷入了僵局。在这种情况下,使用SELECT与仅使用SELECT是否有区别?这是否会改变CASE语句或其他内容的输出?这意味着每个s1.Name0
值只出现一次(实际上每个值可能在v\u R\u系统
表中出现多次),这是您想要的。尝试从查询中删除不同的,然后查看得到的结果。:)