使用2个临时表中的值返回普通用户?

时间:2014-09-24 20:07:07

标签: sql temp-tables

如果有权访问一些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个小部件。因为他需要我将窗口小部件的所有权重新分配给另一个用户。

是否需要某种交叉连接?

1 个答案:

答案 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可能更好)。我这样做是为了分隔两个查询:将函数应用于每个用户名,然后根据列表检查小部件。