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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM