技术笔记:sqlserver2005T

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 技术笔记:sqlserver2005T

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="

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
16天前
|
SQL 安全 API
Python基础教程(第3版)中文版 第13章 数据库支持(笔记)
Python基础教程(第3版)中文版 第13章 数据库支持(笔记)
|
8月前
|
SQL
SQLServer安装教程(史上最详细版本)
SQLServer安装教程(史上最详细版本)
87 0
|
SQL 关系型数据库 Shell
都什么年代了你还不学习postgreSQL(入门篇)(中)
都什么年代了你还不学习postgreSQL(入门篇)(中)
107 0
|
存储 SQL 关系型数据库
都什么年代了你还不学习postgreSQL(入门篇)(下)
都什么年代了你还不学习postgreSQL(入门篇)(下)
86 0
|
SQL 数据库
sqlserver2010兼容sqlserver2008解决方案
sqlserver2010兼容sqlserver2008解决方案
191 0
sqlserver2010兼容sqlserver2008解决方案
|
SQL
Win10_MySQL环境搭建以及Navicat的使用全解(13)
Win10_MySQL环境搭建以及Navicat的使用全解(13)
147 0
Win10_MySQL环境搭建以及Navicat的使用全解(13)
|
存储 关系型数据库 MySQL
Win10_MySQL环境搭建以及Navicat的使用全解(9)
Win10_MySQL环境搭建以及Navicat的使用全解(9)
149 0
Win10_MySQL环境搭建以及Navicat的使用全解(9)
|
SQL 索引
Win10_MySQL环境搭建以及Navicat的使用全解(12)
Win10_MySQL环境搭建以及Navicat的使用全解(12)
98 0
Win10_MySQL环境搭建以及Navicat的使用全解(12)
|
存储 关系型数据库 MySQL
Win10_MySQL环境搭建以及Navicat的使用全解(10)
Win10_MySQL环境搭建以及Navicat的使用全解(10)
80 0
Win10_MySQL环境搭建以及Navicat的使用全解(10)
|
数据库
Win10_MySQL环境搭建以及Navicat的使用全解(7)
Win10_MySQL环境搭建以及Navicat的使用全解(7)
80 0
Win10_MySQL环境搭建以及Navicat的使用全解(7)