考慮事件的序列如下:)如何在重新定義依賴對象後刷新T-SQL用戶定義函數的定義?
- 視圖v_Foo被定義
- 用戶定義的函數的getFoo(被定義,其包括來自v_Foo所有列(使用「選擇* ...」)
- 的v_Foo變化的定義,目前包括多個列
- 我現在想的getFoo()包括在v_Foo新列,但它仍然引用舊的定義
我可以重新運行創建GetFoo的腳本,並且一切都會很好;但這是有問題的原因,我不會去。有沒有其他方法可以刷新用戶定義函數的定義,以便與其相關對象同步?
考慮事件的序列如下:)如何在重新定義依賴對象後刷新T-SQL用戶定義函數的定義?
我可以重新運行創建GetFoo的腳本,並且一切都會很好;但這是有問題的原因,我不會去。有沒有其他方法可以刷新用戶定義函數的定義,以便與其相關對象同步?
簡短,簡單的答案是沒有。
你必須重新定義表格UDF的RETURN TABLE
聲明,GetFoo()
每當v_Foo
變化的定義。
但是有一個方法來解決它(譯爲不實用)。
ALTER_VIEW
事件中創建DDL
觸發器。GetFoo()
。這將是很好看函數的定義。你所說的就是使用SELECT *。你可以說得更詳細點嗎?
您還忘了告訴我們您使用的是什麼版本的SQL Server。如果> = 2005,你看過sp_refreshsqlmodule嗎? http://technet.microsoft.com/en-us/library/bb326754.aspxhttp://technet.microsoft.com/en-us/library/bb326754%28SQL.90%29.aspx
好奇你的理由是堅持SELECT *。許多有關這裏討論,但缺點還是以大比分,恕我直言大於優點:
注:我知道很多人會通過「選擇* ...」和分心會傾向於讓我煩惱 - 請保住你的呼吸。我有我的理由。 – 2009-11-15 19:36:32
隨着*你會錯過所有的SCHEMABINDING好吃的東西:http://blogs.msdn.com/sqlprogrammability/archive/2006/05/12/596424.aspx – 2009-11-15 19:54:20