更改程序集

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

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

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

更改程序集的权限集

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

ALTER ASSEMBLY SQLCLRTest
WITH PERMISSION_SET = EXTERNAL_ACCESS 

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

添加程序集的源代码

CREATE ASSEMBLY 中不存在 ALTER ASSEMBLY 语法中的 ADD FILE 子句。您可以使用该子句来添加源代码或与程序集关联的任何其他文件。这些文件将从其原始位置复制并存储到数据库的系统表中。如果您需要重新创建或记录 UDT 的当前版本,这样可确保源代码或其他文件随时备用。

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

ALTER ASSEMBLY Point

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