Sql server 如何在MS-SQL中更新程序集及其依赖程序集?

Sql server 如何在MS-SQL中更新程序集及其依赖程序集?,sql-server,sqlclr,Sql Server,Sqlclr,情况就是这样: 我有一个Trigger.dll和一个Trigger.XmlSerializer.dll 我使用CREATEASSEMBLY在MSSQL中注册它们 现在,我已经编译了这两个版本的新版本 我想使用ALTERASSEMBLY来更新它们,但是一次只能更新一个。如果你试图更新一个有依赖关系的,它会抱怨。这样做的诀窍是什么 我不想删除并重新创建,因为我必须删除所有触发器等,而且数据库会停机。我担心删除表并重新创建是唯一的方法 主要原因是,如果将程序集更新为新版本,则程序集中类型中存储的值将不

情况就是这样:

我有一个Trigger.dll和一个Trigger.XmlSerializer.dll

我使用CREATEASSEMBLY在MSSQL中注册它们

现在,我已经编译了这两个版本的新版本

我想使用ALTERASSEMBLY来更新它们,但是一次只能更新一个。如果你试图更新一个有依赖关系的,它会抱怨。这样做的诀窍是什么


我不想删除并重新创建,因为我必须删除所有触发器等,而且数据库会停机。

我担心删除表并重新创建是唯一的方法

主要原因是,如果将程序集更新为新版本,则程序集中类型中存储的值将不可用

根据游戏规则,你可以使用它

注释

  • 这些步骤在“如何升级或降级程序集”一节中描述的场景中升级或降级程序集A
  • 本例假设两个程序集的版本都是1.0.0.0,并且程序集都是用C#编写的。执行这些步骤后,将尝试将程序集A和程序集B升级到版本2.0.0.0
要升级或降级程序集A,请执行以下步骤

  • 将程序集B的版本1.0.0.0备份到文件夹中
  • 修改程序集B,然后将其重新编译到版本2.0.0.0
  • 使用ALTER ASSEMBLY语句升级SQL Server 2005中的程序集B
  • 修改程序集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” 注意:要在程序集A的元数据中验证程序集B的版本,请使用Ildasm.exe实用程序打开程序集A。然后,验证清单部分下引用的程序集的元数据信息
  • 使用ALTER ASSEMBLY语句升级SQL Server 2005中的程序集A
  • 两项建议:

    1) 通常,您可以通过使用ILMerge嵌入和内部化依赖项来避免依赖项。因此,在大多数情况下,ALTERASSEMBLY语句应该足够了。我自己还没有用SQLCLR尝试过,但我会尝试一下

    2) 也许XML序列化程序集不是必需的。这本身就是一个值得怀疑的设计,除非您是那些希望在MS SQL Server产品中托管所有业务服务的人之一,而不仅仅是在Windows中编写自己的独立服务(更易于安装、管理和维护),即更多的n层模式,而不是“数据层无所不能”反模式。由于DLL名为Triggers.DLL,因此不建议它声明任何类型或是web服务代理。如果我错过了使用XML序列化程序的其他原因,那么出于兴趣,请详细说明一下