我目前有一个SQL语句对我的程序来说太长了(我有一个可以使用的最大字符数。我正在使用sccm报告)。问题是我的SQL语句如下所示:
Select distinct v_GS_ADD_REMOVE_PROGRAMS_64.DisplayName0, v_GS_ADD_REMOVE_PROGRAMS_64.Publisher0, v_GS_ADD_REMOVE_PROGRAMS_64.Version0
FROM v_GS_ADD_REMOVE_PROGRAMS_64
JOIN v_R_System ON v_GS_ADD_REMOVE_PROGRAMS_64.ResourceID = v_R_System.ResourceID
WHERE (v_R_System.Netbios_Name0 = @computername)
DisplayName0 NOT LIKE 'hpp%'
AND
DisplayName0 NOT LIKE 'Logitech SetPoint%'
AND
DisplayName0 NOT LIKE 'HP Document Manager%'
AND
DisplayName0 NOT LIKE 'HP Imaging Device Functions%'
AND
DisplayName0 NOT LIKE 'PyQt4 - PyQwt5%'
它持续20页。如何最小化此请求包含的代码量?有没有办法将所有displayName0 not like ??
分组为NOT IN(value1, value2, ...)
?
答案 0 :(得分:1)
如果你没有在你的模式中拖尾%,你可以用以下代码替换它:
SELECT ... WHERE DisplayName0 NOT IN ('hpp','Logitech SetPoint','HP Document Manager',...)
这会让它变得更短。
但在我看来,正确的解决方案是创建[temp]表,其中包含您需要过滤的所有名称,然后加入它。
答案 1 :(得分:1)
您可以将值存储在单独的表中,然后在查询中引用它吗?:
SELECT DISTINCT v_GS_ADD_REMOVE_PROGRAMS_64.DisplayName0
,v_GS_ADD_REMOVE_PROGRAMS_64.Publisher0
,v_GS_ADD_REMOVE_PROGRAMS_64.Version0
FROM v_GS_ADD_REMOVE_PROGRAMS_64
JOIN v_R_System ON v_GS_ADD_REMOVE_PROGRAMS_64.ResourceID = v_R_System.ResourceID
WHERE (v_R_System.Netbios_Name0 = @computername) DisplayName0 NOT IN (
SELECT DisplayName0
FROM < NewTableName >
)