我的SQL Server Express数据库中有一个名为testSP
的存储过程。在SQL Server中执行存储过程
我能够使用
exec [db_owner].[testSP]
执行,但如果我用exec testSP
这是行不通的。
这是什么原因?
我有其他数据库没有表现出这种行为。
感谢您的帮助。
我的SQL Server Express数据库中有一个名为testSP
的存储过程。在SQL Server中执行存储过程
我能够使用
exec [db_owner].[testSP]
执行,但如果我用exec testSP
这是行不通的。
这是什么原因?
我有其他数据库没有表现出这种行为。
感谢您的帮助。
您的用户设置为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模式是一个意外。
是的,我使用'[db_owner]。[testSP]'创建了该过程,该过程为此存储过程创建了一个自定义模式。我刚刚在一小时前修好了它。感谢您的输入昵称。 – Zee
很高兴听到它的修复。如果我的答案是有用的,请勾选它。 –
你的用户可能有不同的默认模式。如果你运行'SELECT SCHEMA_NAME()',你会得到什么? PS。如果你发布实际的错误,它确实有帮助。阻止我们猜测。 –
该命令返回dbo – Zee
是的。 'db_owner'与'dbo'不同。什么是实际的错误信息?基本上你的用户被设置为使用dbo,因为它是默认模式,所以在db_owner模式中运行任何你需要的前缀它 –