代码之家  ›  专栏  ›  技术社区  ›  Chris KL

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

  •  12
  • Chris KL  · 技术社区  · 16 年前

    情况就是这样:

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

    我使用CREATEASSEMBLY在MSSQL中注册它们。

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

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

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

    3 回复  |  直到 16 年前
        1
  •  5
  •   Avram    16 年前

    根据 microsoft support

    笔记

    • 这些步骤在“如何升级或降级程序集”一节中描述的场景中升级或降级程序集A。

    要升级或降级程序集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” 注意:要在程序集A的元数据中验证程序集B的版本,请使用Ildasm.exe实用程序打开程序集A。然后,验证清单部分下引用的程序集的元数据信息。
    5. 使用ALTER ASSEMBLY语句升级SQL Server 2005中的程序集A。
        2
  •  1
  •   Frans Bouma    16 年前

    我担心丢掉桌子,重新创建它是唯一的方法。

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

        3
  •  0
  •   Tony Wall    11 年前

    两项建议:

    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序列化程序的其他原因,那么出于兴趣,请详细说明一下。