如何使用dbo过程执行不同的模式?

时间:2014-08-20 10:01:22

标签: sql-server

我正在使用SQL Server 2008 R2,我有一个架构[dbo],在该架构中,我创建了一个存储过程dbo.GetAccount

SELECT * FROM tblAccount

然后,我创建了一个名为[ABC]的用户的模式UserABC

现在,我想使用UserABC登录并为模式dbo.GetAccount执行[ABC]以获取其所有用户,并且不希望更改dbo.GetAccount的代码。那么,我该怎么办?

感谢您的帮助。

1 个答案:

答案 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中选择所有信息。

我现在无法测试,但我应该工作。还记得该表必须在该模式中!

但如果你不能改变所有的程序,我就无法想到解决方案。