如果有权访问一些widgetID,我需要返回检查UserNames的Common Users列表。
如何使用SQL for SQL Server 2008 R2实现最佳效果?
UserNames in #DistinctUIDs table
admin1@co.com
admin2@co.com
admin3@co.com
ent_admin1@co.com
nonadmin1@co.com
WidgetIDs in #WidgetIDs table
765
768
769
Function:
ufnGetWidgetsForUser ( @UserName )
我确保每个临时表中只放了1列。我只需要对UserName进行检查,看看函数是否返回#widgetIDs表中的任何值,换句话说就是匹配。
因此,例如(出于逻辑的缘故),检查admin1@co.com的循环可以访问所有3个小部件。因为他需要我将窗口小部件的所有权重新分配给另一个用户。
是否需要某种交叉连接?
答案 0 :(得分:2)
让我假设这是一个真正的问题:"我只需要对UserName进行检查,看看函数是否返回#widgetIDs表中的任何值,换句话说就是匹配。&# 34;
另外,我假设函数ufnGetWidgetsForUser ( @UserName )
是一个表值函数。
如果是这样,我认为您需要cross apply
以及其他一些检查逻辑:
select distinct u.username
from #DistinctUIDs u cross apply
dbo.ufnGetWidgetsForUser(u.username) as w(widgetId)
where w.widgetId in (select widgetId from #WidgetIds);
请注意,我在这里使用带有子查询的in
。这可能不是实现逻辑的最有效方式(join
可能更好)。我这样做是为了分隔两个查询:将函数应用于每个用户名,然后根据列表检查小部件。