2009-02-05 26 views
12

這種情況:如何在MS-SQL中更新程序集及其相關程序集?

我有一個Trigger.dll和Trigger.XmlSerializer.dll。

我使用CREATE ASSEMBLY在MSSQL中註冊它們。

現在,我編譯了兩個版本。

我想使用ALTER ASSEMBLY來更新它們,但是一次只能更新一個。如果你嘗試更新一個具有依賴性的東西,它會抱怨。這樣做的訣竅是什麼?

我不想刪除並重新創建,因爲我必須刪除所有觸發器等,並且存在數據庫停機時間。

+0

你的sql版本是什麼? – Avram 2009-02-11 00:12:58

回答

5

根據microsoft support您可以使用它的技巧。

  • 這些步驟升級或降級程序集A在被「如何升級或降級程序集」一節中所描述的場景。
  • 此示例假定兩個程序集的版本均爲1.0.0.0,並且程序集均使用C#編寫。當您執行這些步驟時,您嘗試將程序集A和程序集B升級到版本2.0.0.0。

要升級或降級組件A,請按照下列步驟操作。

  1. 將程序集B的版本1.0.0.0備份到文件夾。
  2. 修改並重新編譯程序集B到版本2.0.0.0。
  3. 使用ALTER ASSEMBLY語句升級SQL Server 2005中的程序集B.
  4. 修改然後重新編譯程序集A到版本2.0.0.0。執行此操作時,請從步驟1中創建的備份中引用程序集B的版本1.0.0.0。爲此,請使用Csc.exe編譯器工具和/ reference開關。例如,使用以下命令: csc/target:library /out:AssemblyA.dll AssemblyA.cs AssemblyInfo.cs /reference:"BackupFolder\AssemblyB.dll「 注意要驗證程序集元數據中程序集B的版本A,通過使用Ildasm.exe實用程序打開程序集A.然後,在MANIFEST部分下驗證引用程序集的元數據信息。
  5. 使用ALTER ASSEMBLY語句升級組件中的SQL Server 2005中
1

我擔心丟掉桌子並重新創建桌子是唯一的方法。

這樣做的主要原因是,如果將程序集更新到新版本,則存儲在程序集類型中的值不可用。

0

兩個建議:

1)一般來說,你可以通過使用ILMerge嵌入和內他們避免依賴。所以在大多數情況下,修改彙編語句應該足夠了。還沒有用SQLCLR自己嘗試過,但我會放棄它。

2)也許XML序列化程序集不是必需的?This article suggests it is only necessary when calling external web services inside SQL Server。這本身就是一個值得懷疑的設計,除非你是那些希望在MS SQL Server產品中託管所有業務服務的人之一,而不僅僅是在Windows中編寫自己的獨立服務(更容易安裝,管理和維護),即比「數據層無所不能」的反模式更多的n層模式。由於你的DLL被稱爲Triggers.dll,它不會建議它聲明任何類型或是一個Web服務代理。如果我錯過了使用XML序列化器的其他原因,那麼請詳細說明這一點。

相關問題