EXECUTE AS不默认为架构名称

时间:2017-01-18 03:00:22

标签: tsql

在网上进行了广泛的研究后,我正在联系你们解决这个问题。我的数据库采用基于模式的方法

  

,即dbo.TableA schema1.TableA存在于同一个数据库中。

我正在使用模拟来切换模式。

Create procedure spx_test (@username nvarchar(10) 
As
Execute as Login = @username  -- this user has it's default schema set to schema1
Select * from TableA

上面的SP总是默认为dbo,即dbo.TableA的结果被提取。相反,如果我在SP之外作为SQL块运行,它就像一个魅力。我不确定我在这里缺少什么。

P.S-我尝试过格兰特模仿(没有用)。请注意,连接登录与SP中使用的登录不同。

提前致谢!

更新

如果我将其转换为动态SQL

,则上述SP有效

1 个答案:

答案 0 :(得分:2)

请参阅SQL default schema resolution in Stored Procedure

行为在https://technet.microsoft.com/en-us/library/ms191132(v=sql.105).aspx中描述:"在存储过程内部,与​​模式限定的语句(例如,SELECT或INSERT)一起使用的对象名默认为存储过程的模式"

另请参阅此建议(关闭为"赢得' t"):https://connect.microsoft.com/SQLServer/feedback/details/272964/using-default-schema-in-stored-procedures