目錄
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
但是結果是正確的了。
歡迎大家踴躍推薦和討論。
