【问题标题】:Modifying SCCM reports修改 SCCM 报告
【发布时间】:2019-12-17 15:49:22
【问题描述】:

SCCM 报告中提供了一条 SQL 语句,用于获取具有给定网卡的计算机列表。

SELECT SYS.Name0, Netcard.Description0,Netcard.MACAddress0, Netcard.Manufacturer0 
FROM fn_rbac_R_System(@UserSIDs)  SYS, fn_rbac_GS_NETWORK_ADAPTER(@UserSIDs)  Netcard  
WHERE SYS.ResourceID = Netcard.ResourceID AND Netcard.Description0 LIKE @variable  
ORDER BY SYS.Name0

我想将计算机型号添加到此报告中。如何修改sql语句?

谢谢

*编辑 @SQLChao 我应该研究数据集吗?

这是一个冗长的 SQL 查询,用于提取 sccm 中一组计算机的许多详细信息。

这将是我想要添加到上面的查询中的内容,尽管这个查询似乎使用了更复杂的语法。

v_GS_COMPUTER_SYSTEM_Alias.Model0 AS [Model]

这里是完整的查询。

v_GS_LOGICAL_DISK_Alias.ResourceID )  
 where v_GS_LOGICAL_DISK_Alias.ResourceID =v_R_System_Valid_Alias.ResourceID and v_FullCollectionMembership_Alias.CollectionID = @CollectionID) As [Free Disk Space (MB)]  
 from fn_rbac_R_System_Valid(@UserSIDs) v_R_System_Valid_Alias  
 inner join v_GS_OPERATING_SYSTEM v_GS_OPERATING_SYSTEM_Alias on (v_GS_OPERATING_SYSTEM_Alias.ResourceID = v_R_System_Valid_Alias.ResourceID)  
 left join v_GS_SYSTEM_ENCLOSURE_UNIQUE v_GS_SYSTEM_ENCLOSURE_UNIQUE_Alias on (v_GS_SYSTEM_ENCLOSURE_UNIQUE_Alias.ResourceID = v_R_System_Valid_Alias.ResourceID)  
 LEFT join v_GS_COMPUTER_SYSTEM v_GS_COMPUTER_SYSTEM_Alias on (v_GS_COMPUTER_SYSTEM_Alias.ResourceID = v_R_System_Valid_Alias.ResourceID)  
 LEFT join v_GS_X86_PC_MEMORY v_GS_X86_PC_MEMORY_Alias on (v_GS_X86_PC_MEMORY_Alias.ResourceID = v_R_System_Valid_Alias.ResourceID)  
 LEFT join v_GS_PROCESSOR v_GS_PROCESSOR_Alias on (v_GS_PROCESSOR_Alias.ResourceID = v_R_System_Valid_Alias.ResourceID)  
 inner join v_FullCollectionMembership v_FullCollectionMembership_Alias on (v_FullCollectionMembership_Alias.ResourceID = v_R_System_Valid_Alias.ResourceID)  
 left  join fn_rbac_Site(@UserSIDs) v_Site_Alias on (v_FullCollectionMembership_Alias.SiteCode = v_Site_Alias.SiteCode)  
 LEFT join v_GS_LOGICAL_DISK v_GS_LOGICAL_DISK_Alias on (v_GS_LOGICAL_DISK_Alias.ResourceID = v_R_System_Valid_Alias.ResourceID) and v_GS_LOGICAL_DISK_Alias.DeviceID0=SUBSTRING(v_GS_OPERATING_SYSTEM_Alias.WindowsDirectory0,1,2)  
 left join v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP_Alias on (v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP_Alias.ResourceID = v_R_System_Valid_Alias.ResourceID)  
 Where v_FullCollectionMembership_Alias.CollectionID = @CollectionID  
 Order by v_R_System_Valid_Alias.Netbios_Name0

【问题讨论】:

  • 我这里有一个 SCCM 数据库。我查看了您的查询中引用的 tvf,而模型都没有。也许找到一个确实有模型的报告并发布该代码。
  • @SQLChao 感谢您的快速回复。我会找到一份选择计算机型号的报告并尽快贴出来。

标签: sql sql-server reporting-services sccm


【解决方案1】:

它应该与类似的东西一起使用

SELECT 
    SYS.Name0, 
    SYS.Model0, 
    Netcard.Description0,
    Netcard.MACAddress0, 
    Netcard.Manufacturer0 
FROM 
    (
    SELECT
        S.ResourceID, 
        S.Name0, 
        C.Model0 
    FROM
        fn_rbac_R_System(@UserSIDs) S
    LEFT JOIN 
        V_GS_COMPUTER_SYSTEM C
    ON 
        S.ResourceID = C.ResourceID
    ) SYS,
    fn_rbac_GS_NETWORK_ADAPTER(@UserSIDs)  Netcard  
WHERE 
    SYS.ResourceID = Netcard.ResourceID 
AND 
    Netcard.Description0 LIKE @variable  
ORDER BY 
    SYS.Name0

也可以在整个旧查询之后左连接:

SELECT 
    t1.*, 
    c.Model0 
FROM 
    (
    SELECT 
        SYS.ResourceID, 
        SYS.Name0, 
        Netcard.Description0,
        Netcard.MACAddress0, 
        Netcard.Manufacturer0 
    FROM 
        fn_rbac_R_System(@UserSIDs) SYS, 
        fn_rbac_GS_NETWORK_ADAPTER(@UserSIDs) Netcard  
    WHERE 
        SYS.ResourceID = Netcard.ResourceID 
    AND 
        Netcard.Description0 LIKE @variable  
    ) t1
LEFT JOIN
    V_GS_COMPUTER_SYSTEM c
ON 
    t1.ResourceID = c.ResourceID
ORDER BY t1.Name0

我不是 SQL 专家,无法知道在这种情况下哪个更可取,但对于普通的 sccm 数据库来说,两者的速度都应该是可以接受的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多