【发布时间】:2014-09-01 22:32:29
【问题描述】:
我在 SQL Server 2008 中有一个存储过程,例如:
CREATE PROCEDURE [dbo].[test]
AS
BEGIN
SET NOCOUNT ON;
SELECT user_name();
SELECT SCHEMA_NAME()
SELECT * FROM MyView
END
我有一个名为 testuser.MyView 的视图。然后我使用以下方式调用 SP:
exec as user = 'testuser' exec test
这表明 user_name 和 SCHEMA_NAME 都设置为 testuser
但是我也收到了Invalid object name 'MyView'. 消息,因为 SP 仍在 dbo 模式中查找视图名称。
是否可以更改 SP 的执行方式,以便 MyView 对象引用 testuser.MyView 而不必使用完全限定名称?
我正在尝试在不同模式中的相同表结构上使用一组许多存储过程。我真的想避免使用动态 SQL 重写所有 SP,或者使用限定名称创建所有 SP 的副本。
【问题讨论】:
标签: sql-server stored-procedures database-schema