我是SQL Server的新手并创建了我的第一个存储过程。它执行正常,我可以在“可编程性”,“存储过程”下找到它,所以我弹出一个新查询并键入以下语句:
use name_of_database
exec name_of_stored_procedure 'value'
但是在执行存储过程之前,存储过程的名称用红色加下划线,注意找不到它,所以我运行查询:
select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'name_of_stored_procedure'
纳达。它什么都不返回。
但是,如果我继续执行存储过程,它可以正常工作。
我做错了什么?
答案 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)
就我而言,我这样解决了问题简单:
db_name=>Programmibility=>Stored Procedure
。答案 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)**