更改程序集

适用范围:SQL Server

可以使用 ALTER ASSEMBLY 语句从较新版本更新在 SQL Server 中注册的程序集。 若要更新程序集,请使用具有以下语法的 ALTER ASSEMBLY 语句:

ALTER ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll';

ALTER ASSEMBLY 不会中断正在使用程序集的当前正在运行的进程;进程继续执行未更改的程序集。 ALTER ASSEMBLY 不能用于更改公共语言运行时 (CLR) 函数、聚合函数、存储过程和触发器的签名。 你可以向程序集添加新的公共方法,可以以任何方式修改私有方法,只要签名或属性未更改,就可以修改公共方法。 使用 ALTER ASSEMBLY无法更改本机序列化用户定义类型中包含的字段,包括数据成员或基类。 不支持所有其他更改。 有关详细信息,请参阅 ALTER ASSEMBLY

更改程序集的权限集

还可以使用 ALTER ASSEMBLY 语句更改程序集的权限集。 以下语句将 SQLCLRTest 程序集的权限集更改为 EXTERNAL_ACCESS

ALTER ASSEMBLY SQLCLRTest
    WITH PERMISSION_SET = EXTERNAL_ACCESS;

如果将程序集的权限集从 SAFE 更改为 EXTERNAL_ACCESSUNSAFE,则必须首先创建具有 EXTERNAL ACCESS ASSEMBLY 权限或 UNSAFE ASSEMBLY 权限的非对称密钥和相应登录名。 有关详细信息,请参阅 创建程序集

添加程序集的源代码

ALTER ASSEMBLY 语法中的 ADD FILE 子句不存在于 CREATE ASSEMBLY中。 您可以使用该子句来添加源代码或与程序集关联的任何其他文件。 这些文件将从其原始位置复制并存储到数据库的系统表中。 这样,在需要重新创建或记录用户定义类型的当前版本(UDT)时,始终手头都有源代码或其他文件。

以下语句为 Point UDT 添加 Point.cs 类源代码。 它将复制 Point.cs 文件中包含的文本,并将其存储在名称 PointSource下的数据库中。

ALTER ASSEMBLY Point
ADD FILE FROM 'C:\Projects\Point\Point.cs' AS PointSource;