实现程序集

本主题提供有关以下方面的信息,可帮助你在数据库中实现和使用程序集:

  • 创建程序集

  • 修改程序集

  • 删除、禁用和启用程序集

  • 管理程序集版本

创建程序集

程序集是使用 Transact-SQL CREATE ASSEMBLY 语句或在 SQL Server Management Studio 中使用程序集辅助编辑器创建的。 此外,在 Microsoft Visual Studio 中部署 SQL Server 项目会注册为项目指定的数据库中的程序集。 有关详细信息,请参阅 部署 CLR 数据库对象

使用 Transact-SQL 创建程序集

使用 SQL Server Management Studio 创建程序集

修改程序集

程序集通过使用 Transact-SQL ALTER ASSEMBLY 语句或在 SQL Server Management Studio 中使用程序集辅助编辑器修改程序集。 若要执行以下作,可以修改程序集:

  • 通过上载二进制的程序集的较新版本来更改程序集的实现。 有关详细信息,请参阅本主题后面的 管理程序集版本

  • 更改程序集的权限集。 有关详细信息,请参阅 设计程序集

  • 更改程序集的可见性。 可见程序集可用于在 SQL Server 中引用。 不可见的程序集不可用,即使这些程序集已在数据库中上传也是如此。 默认情况下,上传到 SQL Server 实例的程序集可见。

  • 添加或删除与程序集关联的调试文件或源文件。

使用 Transact-SQL 修改程序集

使用 SQL Server Management Studio 修改程序集

删除、禁用和启用程序集

使用 Transact-SQL DROP ASSEMBLY 语句或 SQL Server Management Studio 删除程序集。

使用 Transact-SQL 删除程序集

使用 SQL Server Management Studio 删除程序集

默认情况下,在 SQL Server 中创建的所有程序集都会被禁用执行。 可以使用sp_configure系统存储过程的 clr 启用选项来禁用或启用在 SQL Server 中上传的所有程序集的执行。 禁用程序集执行可阻止公共语言运行时(CLR)函数、存储过程、触发器、聚合和用户定义的类型执行,并停止当前正在执行的类型。 禁用程序集执行不会禁用创建、更改或删除程序集的功能。 有关详细信息,请参阅 已启用 clr 的服务器配置选项

禁用和启用程序集执行

管理程序集版本

将程序集上传到实例 SQL Server 时,该程序集将存储和托管在数据库系统目录中。 对 Microsoft .NET Framework 中程序集定义所做的任何更改都应传播到存储在数据库目录中的程序集。

必须修改程序集时,必须发出 ALTER ASSEMBLY 语句来更新数据库中的程序集。 这将将程序集更新为保存其实现的 .NET Framework 模块的最新副本。

ALTER ASSEMBLY 语句的 WITH UNCHECKED DATA 子句指示 SQL Server 甚至刷新数据库中持久化数据所依赖的程序集。 具体而言,如果存在以下任一项,则必须指定 WITH UNCHECKED DATA:

  • 持久化计算列,这些列通过 Transact-SQL 函数或方法直接或间接引用程序集中的方法。

  • 依赖于程序集的 CLR 用户定义类型的列,该类型实现 用户定义的 (非本机)序列化格式。

谨慎

如果未指定 WITH UNCHECKED DATA,SQL Server 将尝试阻止 ALTER ASSEMBLY 执行,如果新的程序集版本影响表、索引或其他永久性站点中的现有数据。 但是,SQL Server 不保证更新 CLR 程序集时,计算列、索引、索引视图或表达式将与基础例程和类型一致。 执行 ALTER ASSEMBLY 时请小心,以确保表达式的结果与基于程序集中存储的表达式的值不匹配。

只有 db_ownerdb_ddlowner 固定数据库角色的成员才能使用 WITH UNCHECKED DATA 子句执行 ALTER ASSEMBLY。

SQL Server 向 Windows 应用程序事件日志发布消息,指出程序集已使用表中未选中的数据进行修改。 然后,SQL Server 将包含依赖于程序集的数据的任何表标记为具有未选中的数据。 sys.tables 目录视图的has_unchecked_assembly_data列包含包含未选中数据的表的值 1,对于不包含未选中数据的表,值为 0。

若要解决未选中数据的完整性,请针对未选中数据的每个表运行 DBCC CHECKTABLE。 如果 DBCC CHECKTABLE 失败,则必须删除无效的表行,或修改程序集代码以解决问题,然后发出其他 ALTER ASSEMBLY 语句。

ALTER ASSEMBLY 更改程序集版本。 程序集的区域性和公钥令牌保持不变。SQL Server 不允许注册具有相同名称、区域性和公钥的程序集的不同版本。

与用于版本绑定的计算机范围的策略交互

如果使用发布服务器策略或计算机范围的管理员策略重定向到 SQL Server 中存储的程序集的引用,则必须执行以下作之一:

  • 请确保此重定向到的新版本在数据库中。

  • 对计算机策略或发行者策略的外部策略文件的任何语句进行修改以确保它们引用数据库中的特定版本。

否则,尝试将新的程序集版本加载到 SQL Server 实例将失败。

更新程序集的版本

另请参阅

程序集(数据库引擎)
获取有关程序集的信息