DROP ASSEMBLY失敗,因為對象“IsLegalDate”引用了“ZSqlExtend”。事實證明,許多存儲過程和函數都必須基於這個程序集來構建。這些對象引用此程序集,DROP ASSEMBLY失敗。可以點擊上圖中的查看依賴關系。我們做什麽呢那只能刪除引用這個程序集的所有對象,所以工作量會很大,這些存儲過程和函數都是在重新構建程序集之後構建的。這些存儲過程和函數也可能被引用,不能被刪除。我們更新程序集不是太麻煩了嗎?作者想出了壹個靈活的方式和廣大網友交流。首先ZSqlExtend的代碼如下,它有壹個IsLegalDate函數。用VS2008編譯的文件是ZSqlExtend.dll。使用系統。Data . SqlTypes
使用系統。Data . SqlClient
使用系統。Text .正則表達式;命名空間ZSqlExtend _ NS {公共類zsql extend _ cls {[SQL function(data access = DataAccessKind。閱讀)]
public static bool IsLegalDate(int iyear,int imonth,int iday){ bool ILD = false;try { DateTime new date = new DateTime(iyear,imonth,iday);
日期時間dMin =新的日期時間(1900,1,1);
DateTime dMax =新的DateTime(2079,6,7);
ild = newdate & gtdmin & amp;& ampnewdate & ltdMax} catch { ild = false}返回ild
}} //END CLASS}根據這個dll文件在Sql Server中創建程序集和函數:create assembly ZSqlExtend。
“E:\ hs 1 \ zsql extend \ bin \ zsql extend . dll ”, permission _ set = Safe;
去創建函數IsLegalDate
(@y int,@m int,@d int)
返回位
作為外部名稱ZSqlExtend。【ZSqlExtend_NS。ZSqlExtend_cls]。IsLegalDate
去然後建立壹個類庫項目。比如我會構建壹個ZSqlExtend_dummy的類庫項目。用VS2008編譯的文件是ZSqlExtend_dummy.dll,是ZSqlExtend.dll的替代品。這裏再寫壹遍ZSqlExtend.dll的內容,不過這個是假的,可以這樣寫:使用系統。Data . SqlTypes
使用系統。Data . SqlClient
使用系統。Text .正則表達式;命名空間ZSqlExtend _ NS {公共類zsql extend _ cls {[SQL function(data access = DataAccessKind。閱讀)]
公共靜態bool IsLegalDate(int iyear,int imonth,int iday){ return true;
}} //END CLASS}將這個“假的”ZSqlExtend _ dummy.dll註冊到Sql Server中。創建程序集ZSqlExtend_dummy
from ' E:\ hs 1 \ zsql extend _ dummy \ bin \ zsql extend _ dummy . dll ' with permission _ set = Safe;走吧,我們的第壹步已經完成了。現在我已經修改了ZSqlExtend項目中的IsLegalDate,我需要重新構建程序集,這就是本文開頭所發生的事情。當然,妳可以先刪除IsLegalDate,但我不能這麽做,因為很多計算字段和表的視圖都引用了IsLegalDate。所以我只能將IsLegalDate從程序集ZSqlExtend上解耦,然後刪除程序集ZSqlExtend,重新構建。如果您想解耦,您必須使用ZSqlExtend_dummy,因為它函數簽名與ZSqlExtend完全相同。不能刪除函數IsLegalDate,但是我們可以修改它,並將其更改為另壹個程序集。在Sql Server中執行:alter FUNCTION IsLegalDate
(@y int,@m int,@d int)
返回位
作為外部名稱ZSqlExtend_dummy。【ZSqlExtend_NS。ZSqlExtend_cls]。IsLegalDateGoOK,此時可以刪除並重新構建程序集ZSqlExtend。在Sql Server中運行它:drop assembly ZSqlExtend創建程序集ZSqlExtend
“E:\ hs 1 \ zsql extend \ bin \ zsql extend . dll ”, permission _ set = Safe;
當然,Go必須將函數IsLegalDate改回alter FUNCTION IsLegalDate。
(@y int,@m int,@d int)
返回位
作為外部名稱ZSqlExtend。【ZSqlExtend_NS。ZSqlExtend_cls]。IsLegalDateGo這裏有兩個問題需要註意:1。也許妳會問,既然我們要把函數IsLegalDate改成和程序集ZSqlExtend無關,為什麽不直接用這句話:alter function [dbo]。[Islegaldate] (@ y [int],@ m [int],@ d [int])。
RETURNS[bit]begin return 1;End哈哈,妳會得到如下提示:dbo。“IsLegalDate”是不兼容的對象類型,因此無法更改。2.為什麽要編譯另壹個DLL?重命名編譯後的ZSqlExtend.dll,“假的”就會出現。