我正在使用SQL Server 2008 R2,我有一个架构[dbo]
,在该架构中,我创建了一个存储过程dbo.GetAccount
:
SELECT * FROM tblAccount
然后,我创建了一个名为[ABC]
的用户的模式UserABC
。
现在,我想使用UserABC
登录并为模式dbo.GetAccount
执行[ABC]
以获取其所有用户,并且不希望更改dbo.GetAccount
的代码。那么,我该怎么办?
感谢您的帮助。
答案 0 :(得分:0)
如果我没错,
SELECT * FROM tblAccount actualy means SELECT * FROM [dbo].[tblAccount]
因此,您的过程将始终从dbo架构执行tblAccount。
如果你想(让我们说)有一个“通用”程序,可以从更多的模式执行,我说你尝试使用dinamic sql。
CREATE PROCEDURE [dbo].[GetAccout]
@schema
as
declare @sql varchar(200)
set @sql = 'SELECT * FROM ['+@schema+'].[tblAccount]'
exec(@sql)
然后你运行exec [dbo].[GetAccout] ABC
这应该从YourSchema.tblAccount中选择所有信息。
我现在无法测试,但我应该工作。还记得该表必须在该模式中!
但如果你不能改变所有的程序,我就无法想到解决方案。