本文针对 Dynamics 365 的日常运维和管理需求,整理些实用的 SQL 查询脚本

1. 查询指定实体下的所有系统视图

该查询用于快速检索 Dynamics 365 中特定实体(如客户、联系人)下配置的所有系统视图

-- Example: Query all views and their Ids under the Account entity
SELECT
    v.SavedQueryId AS 'View Id',
    v.Name AS 'View name',
    v.returnedtypecode AS 'Owning entity'
FROM
    SavedQuery v
WHERE
    returnedtypecode = 'account'

2. 检索系统报表清单与元数据

通过查询报表主表,可以获取环境中所有报表的详细信息,包括创建人、创建时间及文件名称,常用于报表资产盘点或清理闲置报表

SELECT reportid,
       name,
       filename,
       description,
       owneridname,
       componentstatename,
       createdon,
       createdbyname
FROM   report;

3. 查询 Annotation 容量

-- Warning: May freeze if data is large
-- 1 MB = 1024 * 1024 Bytes = 1,048,576 Bytes
SELECT SUM(filesize) / 1048576 AS TotalFileSizeMB
FROM   annotation;

4. 查询特定安全角色的所有分配用户

此脚本用于审计,清晰列出拥有某个特定安全角色(如“售前顾问”)的所有用户

SELECT
    systemuser.fullname AS UserFullName,
    systemuser.domainname AS DomainName,
    systemuser.systemuserid AS UserId,
    role.name AS RoleName
FROM
    systemuserroles
INNER JOIN
    systemuser ON systemuserroles.systemuserid = systemuser.systemuserid
INNER JOIN
    role ON systemuserroles.roleid = role.roleid
WHERE
    role.name = 'Pre-sales' -- Security role name

Query result:

UserFullName DomainName UserId RoleName
Zhang San xxx.. Pre-sales
Li Si xxx.. Pre-sales

5. 查看用户分配了哪些安全角色

SELECT
    su.fullname AS UserFullName,
    su.domainname AS DomainName,
    su.systemuserid AS UserId,
    STRING_AGG(r.name, ', ') AS RoleNames
FROM
    systemuserroles sur
INNER JOIN
    systemuser su ON sur.systemuserid = su.systemuserid
INNER JOIN
    role r ON sur.roleid = r.roleid
GROUP BY
    su.fullname,
    su.domainname,
    su.systemuserid
ORDER BY
    su.fullname

查询结果:

UserFullName DomainName UserId RoleName
Zhang San xxx Pre-sales, Sales Manager
Li Si xxx Pre-sales, Sales Director, System Administrator

如果本文对你有所帮助,可以请我喝杯咖啡

(完)