ALTER ASSEMBLY (Transact-SQL)
更新日期: 2005 年 12 月 5 日
通过修改程序集的 SQL Server 目录属性更改程序集。ALTER ASSEMBLY 将程序集刷新为保存其实现的 Microsoft .NET Framework 模块的最新副本,并添加或删除与之关联的文件。可以使用 CREATE ASSEMBLY 创建程序集。
Transact-SQL 语法约定
语法
ALTER ASSEMBLY assembly_name
【 FROM | 】
【 WITH 【 ,...n 】 】
【 DROP FILE { file_name 【 ,...n 】 | ALL } 】
【 ADD FILE FROM
{
client_file_specifier 【 AS file_name 】
| file_bits AS file_name
} 【,...n 】
】 【 ; 】
:: =
'\computer_name\share-name\【path\】manifest_file_name'
| '【local_path\】manifest_file_name'
:: =
{ varbinary_literal | varbinary_expression }
:: =
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
| VISIBILITY = { ON | OFF } 】
| UNCHECKED DATA
参数
assembly_name
要修改的程序集名称。assembly_name 必须已经存在于数据库中。
FROM |
将程序集更新到保存其实现的 .NET Framework 模块的最新副本。仅当没有与指定程序集关联的文件时才能使用此选项。
指定刷新的程序集所在的网络位置或本地位置。网络位置包括计算机名称、共享名称和该共享中的路径。manifest_file_name 指定包含程序集清单的文件的名称。
是该程序集的二进制值。
必须为需要更新的任何相关程序集发出单独的 ALTER ASSEMBLY 语句。
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
指定程序集的 .NET Framework 代码访问权限集属性。有关此属性的详细信息,请参阅 CREATE ASSEMBLY (Transact-SQL)。
VISIBILITY = { ON | OFF }
指示在创建公共语言运行时 (CLR) 函数、存储过程、触发器、用户定义的类型以及针对它的用户定义的聚合函数时,该程序集是否可见。如果设置为 OFF,则程序集只能由其他程序集调用。如果存在已针对该程序集创建的现有 CLR 数据库对象,则无法更改程序集的可见性。默认情况下,由 assembly_name 引用的任何程序集都上载为不可见。
UNCHECKED DATA
默认情况下,如果 ALTER ASSEMBLY 必须验证各个表行的一致性,则它将失败。该选项使您可以通过使用 DBCC CHECKTABLE 将检查推迟到以后的某个时间进行。如果指定该选项,则即使数据库中存在包含下列项的表,SQL Server 仍将执行 ALTER ASSEMBLY 语句:
持久化计算列,这些列通过 Transact-SQL 函数或方法直接或间接引用程序集中的方法。
直接或间接引用程序集中方法的 CHECK 约束。
属于 CLR 用户定义类型且依赖于程序集的列,并且该类型实现的是 UserDefined(非 Native)序列化格式。
CLR 用户定义类型的列,这些列引用通过使用 WITH SCHEMABINDING 创建的视图。
如果存在 CHECK 约束,则它们将被禁用并标记为不可信。任何包含依赖于程序集的列的表都被标记为包含未检查数据,直到对这些表进行了显式检查为止。
只有 db_owner 和 db_ddlowner 固定数据库角色的成员才能指定该选项。
有关详细信息,请参阅实现程序集。
【 DROP FILE { file_name【 ,...n】 | ALL } 】
从数据库中删除与程序集关联的文件名,或与该程序集关联的所有文件。如果与下面的 ADD FILE 一起使用,则 DROP FILE 首先执行。这样可以用相同的文件名替换文件。
【 ADD FILE FROM { client_file_specifier 【 AS file_name】 | file_bitsAS file_name}
将与程序集关联的文件(如源代码、调试文件或其他相关信息)上载到服务器中并使其在 sys.assembly_files 目录视图中可见。client_file_specifier 指定上载文件的位置。可以改用 file_bits 来指定构成该文件的二进制值列表。file_name 指定将文件存储到 SQL Server 实例中时所采用的名称。如果指定了 file_bits,则必须指定 file_name,如果指定了 client_file_specifier,则该参数是可选的。如果未指定 file_name,则将 client_file_specifier 的 file_name 部分用作 file_name。
备注
ALTER ASSEMBLY 不中断当前正在运行的会话,这//代码效果参考:http://www.lyjsj.net.cn/wz/art_23156.html
些会话正在运行所修改的程序集中的代码。当前会话通过使用程序集的未更改位完成执行。如果指定 FROM 子句,则 ALTER ASSEMBLY 相对于所提供的模块的最新副本更新程序集。由于 SQL Server 实例中可能存在已针对程序集定义的 CLR 函数、存储过程、触发器、数据类型和用户定义的聚合函数,因此 ALTER ASSEMBLY 语句将它们重新绑定到该程序集的最新实现。若要完成实现此重新绑定,映射到 CLR 函数、存储过程和触发器的方法必须仍存在于具有相同签名的已修改程序集中。实现 CLR 用户定义的类型和用户定义的聚合函数的类必须仍满足作为用户定义的类型或聚合的要求。
注意:
如果未指定 WITH UNCHECKED DATA,则新建程序集版本影响表//代码效果参考:http://www.lyjsj.net.cn/wz/art_23154.html
、索引或其他持久性站点中的现有数据时,SQL Server 将尝试阻止 ALTER ASSEMBLY 执行。但是,SQL Server 不保证在更新 CLR 程序集时,计算列、索引、索引视图或表达式与基本例程和类型一致。执行 ALTER ASSEMBLY 时要小心,确保表达式的结果与程序集中基于该表达式的值之间不存在不匹配。ALTER ASSEMBLY 可更改程序集版本。程序集的区域性和公钥标记保持不变。
ALTER ASSEMBLY 语句无法用于更改以下各项:
SQL Server 实例中引用此程序集的 CLR 函数、聚合函数、存储过程和触发器的签名。如果 SQL Server 无法将 SQL Server 中的 .NET Framework 数据库对象与程序集的新版本重新绑定,则 ALTER ASSEMBLY 将失败。
使用其他程序集调用的该程序集中的方法签名。
与此程序集依赖的程序集列表,在此程序集的 DependentList 属性中引用。
方法的可索引性,除非没有直接或间接与该方法相关的索引或持久化计算列。
CLR 表值函数的 FillRow 方法名属性。
用户定义聚合的 Accumulate 和 Terminate 方法签名。
系统程序集。
程序集所有权。请改用 ALTER AUTHORIZATION (Transact-SQL)。
此外,对于实现用户定义类型的程序集,ALTER ASSEMBLY 只能用于进行下列更改:
在不更改签名或属性的情况下,修改用户定义类型类的公共方法。
添加新的公共方//代码效果参考:http://www.lyjsj.net.cn/wx/art_23152.html
法。以任何方式修改私有方法。
不能使用 ALTER ASSEMBLY 更改本机序列化用户定义类型(包含数据成员或基类)内包含的字段。不支持所有其他更改。
如果未指定 ADD FILE FROM,则 ALTER ASSEMBLY 将删除任何与程序集关联的文件。
如果执行了没有 UNCHECKED 数据子句的 ALTER ASSEMBLY,则执行检查以验证新数据集版本是否影响表中的现有数据。根据需要检查的数据量,这可能影响性能。
权限
需要对程序集具有 ALTER 权限。其他要求如下:
若要更改其现有权限集为 EXTERNAL_ACCESS 的程序集,SQL Server 登录必须拥有服务器的 EXTERNAL ACCESS 权限。
更改其现有权限集为 UNSAFE 的程序集,需要具有 sysadmin 固定服务器角色中的成员身份。
若要将程序集的权限集更改为 EXTERNAL_ACCESS,SQL Server 登录必须拥有服务器的 EXTERNAL ACCESS ASSEMBLY 权限。
若要将程序集的权限集更改为 UNSAFE,需要具有 sysadmin 固定服务器角色中的成员身份。
指定 WITH UNCHECKED DATA 需要具有 sysadmin 固定服务器角色中的成员身份。
有关程序集的权限集的详细信息,请参阅设计程序集。
示例
A. 刷新程序集
以下示例将程序集 ComplexNumber 更新到保存其实现的 .NET Framework 模块的最新副本。
注意:
可以通过运行 UserDefinedDataType 示例脚本创建程序集 ComplexNumber。有关详细信息,请参阅用户定义数据类型 (UDT) 示例。
ALTER ASSEMBLY ComplexNumber
FROM 'C:\Program Files\Microsoft SQL Server\90\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'
B. 添加一个文件以与程序集关联
以下示例上载源代码文件 Class1.cs,使之与程序集 MyClass 关联。该示例假设已在数据库中创建了程序集 MyClass。
复制代码
ALTER ASSEMBLY MyClass
ADD FILE FROM 'C:\MyClassProject\Class1.cs';
C. 更改程序集的权限
以下示例将程序集 ComplexNumber 的权限集由 SAFE 更改为 EXTERNAL ACCESS。
复制代码
ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS
ALTER APPLICATION ROLE (Transact-SQL)
更改应用程序角色的名称、密码或默认架构。
Transact-SQL 语法约定
语法
ALTER APPLICATION ROLE application_role_name
WITH 【 ,...n 】
::=
NAME = new_application_role_name
| PASSWORD = 'password'
| DEFAULT_SCHEMA = schema_name
参数
application_role_name
要修改的应用程序角色的名称。
NAME = new_application_role_name
指定应用程序角色的新名称。该名称一定不能被用于引用数据库中任何主体。
PASSWORD = 'password'
指定应用程序角色的密码。将检查密码的复杂性。应始终使用强密码。
DEFAULT_SCHEMA = schema_name
指定服务器在解析对象名时将搜索的第一个架构。schema_name 可以指定一个数据库中不存在的架构。
备注
如果数据库中已存在新的应用程序角色名称,则该语句将失败。当更改应用程序角色的名称、密码或默认架构更改时,与该角色关联的 ID 将不会随之改变。
重要提示:
密码过期策略不应用于应用程序角色密码。为此,选择强密码时要格外谨慎。调用应用程序角色的应用程序必须存储其密码。
在 sys.database_principals 目录视图中可以查看应用程序角色。
注意:
在 SQL Server 2005 中,架构的行为与早期版本的 SQL Server 中的行为不同。假设架构与数据库用户等价的代码不能返回正确的结果。在曾经使用过以下任何 DDL 语句的数据库中,不应当使用旧目录视图(包括 sysobjects):CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE、ALTER AUTHORIZATION。在曾经使用过这些语句中的任意一个语句的数据库中,必须使用新的目录视图。新的目录视图将采用在 SQL Server 2005 中引入的使主体和架构分离的方法。有关目录视图的详细信息,请参阅目录视图 (Transact-SQL)。
权限
要求对数据库具有 ALTER ANY APPLICATION ROLE 权限。若要更改默认架构,用户还需要对应用程序角色有 ALTER 权限。应用程序角色可以修改其自身的默认架构,但不能修改其名称或密码。
示例
A. 更改应用程序角色的名称
以下示例将应用程序角色 weekly_receipts 的名称更改为 receipts_ledger。
复制代码
USE AdventureWorks;
CREATE APPLICATION ROLE weekly_receipts
WITH PASSWORD = '987Gbv8$76sPYY5m23' ,
DEFAULT_SCHEMA = Sales;
GO
ALTER APPLICATION ROLE weekly_receipts
WITH NAME = receipts_ledger;
GO
B. 更改应用程序角色的密码
以下示例将更改应用程序角色 receipts_ledger 的密码。
复制代码
ALTER APPLICATION ROLE receipts_ledger
WITH PASSWORD = '897yUUbv867y$200nk2i';
GO
C. 更改名称、密码和默认架构
以下示例将同时更改应用程序角色 receipts_ledger 的名称、密码和默认架构。
复制代码
ALTER APPLICATION ROLE receipts_ledger
WITH NAME = weekly_ledger,
PASSWORD = '897yUUbv77bsrEE00nk2i',
DEFAULT_SCHEMA = Production;
GO
ALTER ASYMMETRIC KEY (Transact-SQL)
更改非对称密钥的属性。
Transact-SQL 语法约定
语法
ALTER ASYMMETRIC KEY Asym_Key_Name ::=
| REMOVE PRIVATE KEY
::= WITH PRIVATE KEY (
【 ,
】 )
::= ENCRYPTION BY PASSWORD = 'password' | DECRYPTION BY PASSWORD = 'old_password'
参数
Asym_Key_Name
非对称密钥在数据库中所使用的名称。
REMOVE PRIVATE KEY
从非对称密钥中删除私钥,但不删除公钥。
WITH PRIVATE KEY
更改私钥的保护。
ENCRYPTION BY PASSWORD = 'password'
指定用于保护私钥的新密码。将检查密码的复杂性。如果省略该选项,则使用数据库主密钥对私钥进行加密。
DECRYPTION BY PASSWORD = 'password'
指定当前用于保护私钥的旧密码。如果私钥使用数据库主密钥进行加密,则不需要指定旧密码。
备注
如果没有 ENCRYPTION BY PASSWORD 选项所需的数据库主密钥,并且未提供任何密码,则该操作将失败。有关如何创建数据库主密钥的信息,请参阅 CREATE MASTER KEY (Transact-SQL)。
您可以按下表所示,指定 PRIVATE KEY 选项,然后使用 ALTER ASYMMETRIC KEY 更改私钥的保护。
更改其保护 密码加密 密码解密
旧密码到新密码
需要
需要
密码到主密钥
省略
需要
主密钥到密码
需要
省略
必须首先打开数据库主密钥,然后才能使用它来保护私钥。有关详细信息,请参阅 OPEN MASTER KEY (Transact-SQL)。
若要更改非对称密钥的所有权,请使用 ALTER AUTHORIZATION。
<img id="ctl00_rs1_mainContentContainer_cpe149582_i" style="border-width: 0; vertical-align: middle" alt="" src="" _fcksavedurl="