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


2011-09-28 00:37lmx0104 | 分類:數據庫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 這個存儲過程
那麼就 返回 執行的結果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章