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


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 这个存储过程
那么就 返回 执行的结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值