2014-07-11 62 views
0

我在SQL Server 2008中,如存储过程:SQL Server在存储过程中如何查找对象名称?

CREATE PROCEDURE [dbo].[test] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT user_name(); 
    SELECT SCHEMA_NAME() 
    SELECT * FROM MyView 
END 

我有一个名为testuser.MyView视图。

exec as user = 'testuser' exec test 

这说明user_name和SCHEMA_NAME都被设置为TESTUSER 但我也得到一个Invalid object name 'MyView'.消息,作为SP仍然在dbo架构查找视图名称:然后我用调用SP 。

有没有办法改变SP的执行方式,这样MyView对象引用testuser.MyView而不必使用完全限定名称?

我想在不同模式的相同表结构上使用一组很多存储过程。我真的希望避免使用动态SQL重写所有SP,或者使用限定名称创建所有SP的副本。

回答

1

使用模块所有者的默认模式解析不合格的对象名称。这种行为不能改变,所以你需要诉诸你提到的其他方法。

由于您已经为具有相同结构的每个用户创建单独的表和视图,为什么不能同时在用户的模式中创建存储过程呢?

+0

谢谢丹。我担心可能会是这样。 SP非常复杂,其中有很多,所以我想避免100个重复的SP。我想擦除和重建所有脚本都是唯一的解决方案。 – geographika

相关问题