[Правка] Отчёт SQL
Доброго времени суток всем.
Использую SMS 2007 для развёртывания ПО. Использовал отчёт для поиска всех машин, на которых установлен NOD 32.
Теперь задача стала в обратном — найти все машины, на которых он не установлен.
Вот сам отчёт, который находит машины, на которых есть NOD32
Код:
SELECT TOP (100) PERCENT dbo.v_R_System.Name0 AS [Computer name], dbo.v_R_System.User_Name0 AS [User name],
dbo.v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 AS [ESET NOD32 Antivirus]
FROM dbo.v_R_System INNER JOIN
dbo.v_GS_ADD_REMOVE_PROGRAMS ON dbo.v_R_System.ResourceID = dbo.v_GS_ADD_REMOVE_PROGRAMS.ResourceID
WHERE (dbo.v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 = 'ESET NOD32 Antivirus')
ORDER BY [Computer name]
Что-то подсказывает, что надо изменить параметр WHERE, но не знаю на какой. Подскажите пожалуйста.
|
Здесь поможет другой запрос, точнее 2 подзапроса в одном. Сейчас попробую написать в блокноте и выложить.
Код:
SELECT TOP (100) PERCENT
dbo.v_R_System.Name0 AS [Computer name],
dbo.v_R_System.User_Name0 AS [User name],
dbo.v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 AS [ESET NOD32 Antivirus]
FROM
dbo.v_R_System INNER JOIN
dbo.v_GS_ADD_REMOVE_PROGRAMS ON
dbo.v_R_System.ResourceID = dbo.v_GS_ADD_REMOVE_PROGRAMS.ResourceID
WHERE
[Computer name] not in
(
SELECT TOP (100) PERCENT
dbo.v_R_System.Name0 AS [Computer name],
FROM
dbo.v_R_System INNER JOIN
dbo.v_GS_ADD_REMOVE_PROGRAMS ON
dbo.v_R_System.ResourceID = dbo.v_GS_ADD_REMOVE_PROGRAMS.ResourceID
WHERE
dbo.v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 = 'ESET NOD32 Antivirus'
ORDER BY [Computer name]
)
ORDER BY [Computer name]
Суть в том, что ты в подзапросе WHERE выбираешь имена машин, где стоит НОД, А в основном запросы ты выбираешь ВСЕ машины, за исключением тех, которые в списке подзапроса.
Для ускорения работы запроса, если в таблице есть ID, лучше подзапрос написать так:
Код:
WHERE
dbo.v_R_System.ID not in
(
SELECT TOP (100) PERCENT
dbo.v_R_System.ID AS [Computer name],
FROM
dbo.v_R_System INNER JOIN
dbo.v_GS_ADD_REMOVE_PROGRAMS ON
dbo.v_R_System.ResourceID = dbo.v_GS_ADD_REMOVE_PROGRAMS.ResourceID
WHERE
dbo.v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 = 'ESET NOD32 Antivirus'
ORDER BY [Computer name]
)
|
Время: 01:13.
© OSzone.net 2001-