无法找到存储过程,但可以执行它

时间:2012-02-23 19:09:47

标签: sql-server-2008

我是SQL Server的新手并创建了我的第一个存储过程。它执行正常,我可以在“可编程性”,“存储过程”下找到它,所以我弹出一个新查询并键入以下语句:

use name_of_database
exec name_of_stored_procedure 'value'

但是在执行存储过程之前,存储过程的名称用红色加下划线,注意找不到它,所以我运行查询:

select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'name_of_stored_procedure'

纳达。它什么都不返回。

但是,如果我继续执行存储过程,它可以正常工作。

我做错了什么?

6 个答案:

答案 0 :(得分:24)

对于SSMS,您只需要清除智能感知缓存(Ctrl + Shift + R)。然后红色波浪形线将消失,Intellisense将帮助你解决这个问题。

如果您可以在可编程性下查看存储过程 - >对象资源管理器中的存储过程,然后您就可以通过select * from information_schema.routines ...查询查看它。检查数据库上下文以及查询的其余部分。取出where子句并查看整个结果集。

答案 1 :(得分:2)

您的程序是否可能在dbo以外的模式中?在创建和引用对象时,应始终指定模式。 as described here有几个原因。实质上,当您未指定架构时,您可能会遇到各种令人困惑的行为,具体取决于创建或调用该过程的用户的默认架构。

在检查是否存在对象时,您还应该考虑模式。

另外,您应该检查sys.procedures中的程序。关于coding consistently here的一些背景信息,因为您无法始终获得INFORMATION_SCHEMA之后的信息。

答案 2 :(得分:2)

我有同样的问题,我只是使用方括号

来修复它
EXEC [dbo].[procedureName]

希望以后可以帮助别人:)

答案 3 :(得分:1)

就我而言,我这样解决了问题简单:

  1. 每当我创建过程时,我只需在MSSQL Server Studio上执行一次该过程。所以我使用db_name=>Programmibility=>Stored Procedure
  2. 中的模式获得了创建的过程
  3. 最后我用C#代码调用它。并得到解决!!!

答案 4 :(得分:0)

我的猜测是,您可能只是针对不同的数据库(可能是主数据库)运行第二个查询,请尝试:

use 'name_of_database'
select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'name_of_stored_procedure'

然后你应该能够看到它

答案 5 :(得分:0)

我遇到了同样的问题,这让我发疯了。

我为解决此问题所做的事情:

CREATE OR ALTER PROCEDURE [dbo.ProcedureName] (@Parameter, Datatype)
[dbo.ProcedureName] 'Parameter' OR EXEC [dbo.ProcedureName] 'Parameter'

OR

Go to Edit/IntelliSense/Refresh Local Cache **(cmd+shift+r)**