我可以从存储过程中引用视图中的表吗?

时间:2010-02-26 06:37:05

标签: tsql

我在我的数据库中创建了一个关于3个表的视图,它们如下:

Activity

ActivityRole

aspnet_UsersInRoles

我试图抓住Activity和ActivityRole中的内容的组合,如果我传入的UserId是活动角色中指定的角色的成员。

我正在创建一个视图,因为我想生成一个名为Activity的视图对象,该对象包含来自Activity和ActivityRole的字段。

我的第一次尝试是在Activity.ActivityId = ActivityRole.ActivityId和ActivityRole.RoleId = aspnet_UsersInRoles.RoleId

上创建INNER JOINED Activity to ActivityRole和ActivityRole to UserRoles的视图

现在我想只通过位于aspnet_User_UserRoles表中的UserId拉回记录。

我倾向于编写一个存储过程:

SELECT * From MyView WHERE aspnet_UsersInRoles.UserID = @UserID

但是我无法通过存储过程在视图中引用aspnet_UsersInRoles表。

我的方法完全错了吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

当您查看表格时,您应该查看视图,包括行和列。从外部可以看到您在视图中定义的列,而不是您创建视图的表中的基础列。因此,在您的情况下,MyView没有名为aspnet_UsersInRoles.UserId的列。

为了能够在此列上进行查询,您应该将其包含在视图中。然后你可以做类似的事情:

SELECT * FROM MyView v WHERE v.UserId = @UserId