在网上进行了广泛的研究后,我正在联系你们解决这个问题。我的数据库采用基于模式的方法
,即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有效答案 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