select * from 在自定義函數(視圖)中的特殊問題(在后面附解決辦法)


目錄

 

 

 

1、提出問題

在自定義表值函數中,如果有返回select * from的情況 這個時候如果修改表結構,如添加表的字段表值函數的返回值就會和實際值不相同。

修改前表結構

修改前表的數據

自定義表值函數

修改表結構前搜索結果

 

修改后表結構

修改表結構后的查詢結果

2、分析問題

如上圖,大家可以看到自定義函數查詢結果的ttt列結果不對了

變成了createdate列的結果,而createdate列沒有了。

個人推測是自定義函數編譯的時候自動會把select * from 解析成具體的列,並且保存,但是查詢語句還是直接保存。

所以當表結構表的時候按照列的數組取匹配了,這樣就會出現上圖的問題,第一列匹配第一列,第n列匹配第n列,

ttt列匹配成添加的列createdate。而原來的ttt 就變成不顯示了。


3、解決問題:

1、我認為避免的最好辦法是不用Select *

2、重新編譯自定義函數

3、如果可以,重新生成自定義函數的列(已確認見后面訂正內容)--

 

--訂正內容 12:51

從上圖中可以看到修改表結構后,自定義函數的列沒有修改,驗證了我的猜測。

解決辦法3 - 重新編譯

我自己寫了一個重新編譯的SQL

修改后執行的sql:

因為有修改所以CreateDate現在變成了NuLL

但是結果是正確的了。

 

歡迎大家踴躍推薦和討論。


免責聲明!

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



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