2017-02-15 159 views
0

我的SQL Server Express数据库中有一个名为testSP的存储过程。在SQL Server中执行存储过程

我能够使用

exec [db_owner].[testSP] 

执行,但如果我用exec testSP这是行不通的。

这是什么原因?

我有其他数据库没有表现出这种行为。

感谢您的帮助。

+0

你的用户可能有不同的默认模式。如果你运行'SELECT SCHEMA_NAME()',你会得到什么? PS。如果你发布实际的错误,它确实有帮助。阻止我们猜测。 –

+0

该命令返回dbo – Zee

+0

是的。 'db_owner'与'dbo'不同。什么是实际的错误信息?基本上你的用户被设置为使用dbo,因为它是默认模式,所以在db_owner模式中运行任何你需要的前缀它 –

回答

1

您的用户设置为dbo,因为它是默认模式。这是相当正常的

当您运行

exec testSP 

它使用默认模式是dbo,所以它运行以下命令:

exec [dbo].[testSP] 

不存在。

当您运行

exec [db_owner].[testSP] 

它找到并运行该存储过程

我不知道的背景,但我想有人有正确/不小心创建并使用了一种叫做架构db_owner

在所有工作的数据库中,我猜这些对象是在dbo模式中,或者您的用户被设置为使用正确的模式。去看看在对象浏览器和比较

如果你想存储过程移入dbo模式运行这个命令:

ALTER SCHEMA dbo TRANSFER [db_owner].[testSP]; 

如果你想改变你的用户的默认架构DB_OWNER运行此:

ALTER USER [youruser] WITH DEFAULT_SCHEMA = db_owner; 

我认为db_owner模式是一个意外。

+0

是的,我使用'[db_owner]。[testSP]'创建了该过程,该过程为此存储过程创建了一个自定义模式。我刚刚在一小时前修好了它。感谢您的输入昵称。 – Zee

+0

很高兴听到它的修复。如果我的答案是有用的,请勾选它。 –

相关问题