在SQL Server 2008R2中,我可以强制View使用用户默认架构中的对象而不是View存在的架构吗?

时间:2013-04-24 14:18:25

标签: sql-server-2008-r2

一点背景知识。我有一个基本应用程序,大多数客户使用它作为标准。但是,一些客户端具有小代码和数据库自定义。 这些客户中的每一个都有自己的分支,维护也很棘手。

我想将所有这些整合到一个数据库结构中(不是单个数据库 - 我们不做多租户),以便能够以更加统一的方式应用升级。 我还处于概念验证阶段,但我要走的路线是将标准对象保留在它们当前存在的模式中(主要是dbo)并让自定义对象驻留在每个模式中客户端。

例如,我可以使用dbo.users和client1.users,它们有一些额外的列。如果我将客户端的默认架构设置为" client1"然后是以下查询

SELECT * FROM users

将根据连接的登录名从client1架构或dbo架构返回数据。 这绝对是我想要实现的目标。

我遇到的问题是使用Views。 我在dbo架构中有很多视图,并且引用了Users表。无论我连接到数据库的哪个用户,这些视图总是从dbo.users中选择。

所以我猜测我的问题是: 我可以在视图中为表格添加一些变量,如" DEFAULT"? e.g。

SELECT u.username, u.email, a.level
FROM DEFAULT.users u INNER JOIN accessLevels a ON u.accessID = a.accessID

如果这不可能并且我完全咆哮错误的树,你对我如何能够实现我想要做的事情有任何建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

只需引用视图所在的架构的名称......

选择a。,b。 来自schema1.TABLEA A. 在A.ID = B.ID

上加入schema2.TABLEB B.