sql server denali ctp3中新增存储过程abc后,能使用EXEC abc,但是提示找不到存储过程“abc”

本文解答了在SQL Server环境中创建存储过程后立即调用出现编译错误的问题,解释了客户端与服务器端数据同步机制及如何解决此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


2011-09-28 00:37 lmx0104  |  分类:数据库DB  |  浏览618次
sql server denali ctp3中新增存储过程abc后,能使用EXEC abc,但是abc下有红线,提示找不到存储过程“abc”,将sql server 关闭后重新打开,红线才会消失,请问为什么?该怎么办?
2011-09-28 09:58 提问者采纳
原因是这样的.
你的 SQL Server  客户端, 在连接到 SQL Server 数据库以后。
会自动读取 数据库的 数据字典信息。
也就是 当前数据库, 有哪些表/字段/视图/存储过程 等 基础信息。 保存在客户端的  内存里面。

这样。当你在客户端
输入 SQL 语句的时候,  输入   表名字.    会自动弹出 这个表的 字段列表, 让你选择。

但是, 当你新建了一个对象的时候, 例如表,  或者你的那个例子, 是 新建 存储过程abc
这个时候, 数据库那里, 已经有 存储过程  abc 了。

但是客户端的缓存里面, 并没有 存储过程  abc 的信息。 因为内存里面的信息,没有更新。
因此,在客户端那里。 输入  EXEC abc,  abc下有红线。

将 客户端关闭后,重新打开, 由于客户端 重新加载了 数据库的基础信息。
知道了 当前数据库里面, 有 一个名字叫  abc 的存储过程
因此,就不出  红线  了。
追问
谢谢你的回答
但是我的SQL SERVER 是安装的自己的电脑上的,数据库也存放在C盘的,为什么还要重新加载呢?我在公司用的SQL SERVER新增完了就能直接用了啊。
回答
SQL Server  的工作方式,  是  客户端 - 服务器 的工作方式.

就算 SQL SERVER 是安装的自己的电脑上的,数据库也存放在C盘
但是你的机器上,实际上是运行了 2 个程序, 一个是 服务器程序, 一个是 客户端程序。
客户端 新建了存储过程, 实际上是 把 SQL 代码, 发送给 服务器程序。
服务器程序 编译代码的有效性,并存储。

假如 编译通过了, 那是可以运行的, 不管你数据库存在本机, 还是存在服务器上面。

至于你本地的那个 红线, 实际上是 客户端的 本地的模拟的 编译。
客户端不管你代码是否正确, 都是 发送给服务器那里去 执行的。

因此你 
abc下有红线,提示找不到存储过程“abc”
而  又能使用EXEC abc

这个就是 客户端 认为 服务器上面, 没有 abc 这个存储过程。
但是你执行 
EXEC abc
客户端 是只能原样的把这句话, 发给服务器

如果 服务器那里, 真的没有 abc 这个存储过程
那么会返回 服务器的 错误提示。

如果服务器有  abc 这个存储过程
那么就 返回 执行的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值