改变程序集
适用范围: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 (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