SQLServer 物件建立注意事項之dbo

清風艾艾發表於2022-11-30

       最近,一客戶遇到一個奇怪的問題,sqlserver資料庫,使用備份恢復到目標機器。之後,在目標伺服器建立了測試函式物件,但是執行查詢的時候卻提示物件不存在,再次嘗試重新建立該函式及其依賴的物件時能正常執行。經過仔細檢查發現登陸操作的使用者擁有的預設架構是db_owner,檢查建立的資料庫下的相關函式顯示db_owner.func_name,當查詢語句引用物件加上db_owner.func_name時可以執行正常執行查詢。後來在建立函式及其依賴的物件時加上dbo.func_name,再次執行查詢可以正常執行。


      一、問題現象

       在sqlserver資料庫中建立了測試函式物件,但是執行查詢的時候卻提示物件不存在:


      再次嘗試重新建立該函式及其依賴的物件時,沒有發現任提示報錯:



    二、問題分析

    檢視指定資料庫下該函式的位置情況,發現其在db_owner下:

    嘗試執行select * from db_owner.Fn_GetQuestion……能正常執行查詢:

後經過檢視執行操作的使用者的預設架構是db_owner。

    三、問題處理

    將函式及其依賴的物件刪除,在物件名稱前新增dbo.字首後再次執行建立,程式測試查詢恢復正常。

    四、總結

    sqlserver資料庫與其他資料庫不一樣,其資料庫物件預設存放在dbo方案下,程式執行解析時也是預設在dbo方案下查詢,當類似本案例的函式或者表物件建立沒有新增dbo.字首時,建立的物件就可能放在其他方案下,導致程式執行解析出現異常。

因此,使用sqlserver資料庫時,建立表或者函式等物件,最好養成顯示新增dbo.字首。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2926032/,如需轉載,請註明出處,否則將追究法律責任。

相關文章