我有两个疑问:
查询 #1:获取所有订阅
它返回哪个用户拥有哪个订阅
SELECT
S.ScheduleID, C.[Path] ObjectPath, U.UserName,
SB.[Description], S.StartDate, S.LastRunTime
FROM
ReportServer.dbo.ReportSchedule RS
INNER JOIN
ReportServer.dbo.Schedule S ON S.ScheduleID = RS.ScheduleID
INNER JOIN
ReportServer.dbo.[Catalog] C ON C.ItemID = RS.ReportID
INNER JOIN
ReportServer.dbo.Subscriptions SB ON SB.SubscriptionID = RS.SubscriptionID
INNER JOIN
ReportServer.dbo.Users U ON U.UserID = SB.OwnerID
结果:
+:-----------:+----------+--------+-------------+---------+----------------+
| ScheduleID |ObjectPath|UserName| Description |StartDate| LastRunTime |
+:-----------:----------:--------:------------+---------+----------------+
| 6D28791 | | MPE\gaq| | | |
| 6D28782 | | MPE\Sam| | | |
| 6D281w2 | | | | | |
| | | | | | |
| | | | | | |
+------------+----------+------+-----+---------+----------------+---------+
查询 #2:获取非活动帐户。
这将返回所有仍在服务器中的非活动用户
SELECT
CAT.Name, U.UserName, ROL.RoleName, ROL.Description, U.AuthType
FROM
dbo.Users U
INNER JOIN
dbo.PolicyUserRole PUR ON U.UserID = PUR.UserID
INNER JOIN
dbo.Policies POLICY ON POLICY.PolicyID = PUR.PolicyID
INNER JOIN
dbo.Roles ROL ON ROL.RoleID = PUR.RoleID
INNER JOIN
dbo.Catalog CAT ON CAT.PolicyID = POLICY.PolicyID
结果:
+------------+----------+-------------+-----------+----------------+
| Name |UserName | RoleName |Description| Authtype |
+------------+----------+-------------+-----------+----------------+
|Project X | MPE\asw| | | |
|Project y | MPE\Sam| | | |
| | | | | |
| | | | | |
| | | | | |
+------------+----------+-------------+-----------+----------------+
#Main 问题:查找所有订阅的非活动用户。
#我需要检查表1的“UserName”列中是否存在表2中“UserName”列的值。
有人知道怎么做吗?
到目前为止,我尝试加入两列,但每次都会出现错误。
SELECT
ScheduleID, UserName
FROM
(SELECT
S.ScheduleID, C.[Path] ObjectPath, U.UserName,
SB.[Description], S.StartDate, S.LastRunTime
FROM
ReportServer.dbo.ReportSchedule RS
INNER JOIN
ReportServer.dbo.Schedule S ON S.ScheduleID = RS.ScheduleID
INNER JOIN
ReportServer.dbo.[Catalog] C ON C.ItemID = RS.ReportID
INNER JOIN
ReportServer.dbo.Subscriptions SB ON SB.SubscriptionID = RS.SubscriptionID
INNER JOIN
ReportServer.dbo.Users U ON U.UserID = SB.OwnerID
) AS one
JOIN
(SELECT
CAT.Name, U.UserName, ROL.RoleName, ROL.Description, U.AuthType
FROM
dbo.Users U
INNER JOIN
dbo.PolicyUserRole PUR ON U.UserID = PUR.UserID
INNER JOIN
dbo.Policies POLICY ON POLICY.PolicyID = PUR.PolicyID
INNER JOIN
dbo.Roles ROL ON ROL.RoleID = PUR.RoleID
INNER JOIN
dbo.Catalog CAT ON CAT.PolicyID = POLICY.PolicyID
) AS two ON one.ScheduleID = two.UserName
我收到此错误:
<块引用>第 16 层,状态 1,第 2 行
不明确的列名“用户名”
答案 0 :(得分:2)
您需要在第一个 select 语句中使用正确的别名:
SELECT
one.ScheduleID, one.UserName
FROM
(SELECT
S.ScheduleID, C.[Path] ObjectPath, U.UserName,
SB.[Description], S.StartDate, S.LastRunTime
FROM
ReportServer.dbo.ReportSchedule RS
INNER JOIN
ReportServer.dbo.Schedule S ON S.ScheduleID = RS.ScheduleID
INNER JOIN
ReportServer.dbo.[Catalog] C ON C.ItemID = RS.ReportID
INNER JOIN
ReportServer.dbo.Subscriptions SB ON SB.SubscriptionID = RS.SubscriptionID
INNER JOIN
ReportServer.dbo.Users U ON U.UserID = SB.OwnerID) AS one
WHERE one.UserName IN
(SELECT
U.UserName
FROM
dbo.Users U
INNER JOIN
dbo.PolicyUserRole PUR ON U.UserID = PUR.UserID
INNER JOIN
dbo.Policies POLICY ON POLICY.PolicyID = PUR.PolicyID
INNER JOIN
dbo.Roles ROL ON ROL.RoleID = PUR.RoleID
INNER JOIN
dbo.Catalog CAT ON CAT.PolicyID = POLICY.PolicyID)