• exec时 sqlserver 提示找不到存储过程


    今天在sql server 里新建了几个存储过程,每次都是建了之后,存储过程是可以看见的,但用exec语句的时候,却一直有红色波浪线提示找不到存储过程,但是直接执行,却又是可以执行成功的,很奇怪,每次都需要重新打开ssms,红色 的波浪线提示才会取消!看到百度知道上有一个很好的解释是:
    原因是这样的.你的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 这个存储过程那么就会返回执行的结果。

    原文 转 http://blog.sina.com.cn/s/blog_8e17040001012q26.html

  • 相关阅读:
    Setting up jQuery Unobtrusive Validation
    Valid vs Validate
    HTML Tags containing Vue.js v-if and v-for directives flash at loading
    What does a CSS selector in square brackets select in HTML?
    Template refs
    How to check if a variable is not null?
    Android中的Context
    Android从零基础到App上线
    ConstraintLayout 使用汇总
    ConstraintLayout的使用
  • 原文地址:https://www.cnblogs.com/IWantPower/p/7193562.html
Copyright © 2020-2023  润新知