ALTER ASSEMBLY (Transact-SQL)
Modifica una ensamblado cambiando las propiedades del catálogo SQL Server de un ensamblado. ALTER ASSEMBLY lo actualiza a la última copia de los módulos de Microsoft.NET Framework que conservan su implementación y agrega o quita los archivos asociados con él. Los ensamblados se crean con CREATE ASSEMBLY.
Sintaxis
ALTER ASSEMBLY assembly_name
[ FROM <client_assembly_specifier> | <assembly_bits> ]
[ WITH <assembly_option> [ ,...n ] ]
[ DROP FILE { file_name [ ,...n ] | ALL } ]
[ ADD FILE FROM
{
client_file_specifier [ AS file_name ]
| file_bits AS file_name
} [,...n ]
] [ ; ]
<client_assembly_specifier> :: =
'\\computer_name\share-name\[path\]manifest_file_name'
| '[local_path\]manifest_file_name'
<assembly_bits> :: =
{ varbinary_literal | varbinary_expression }
<assembly_option> :: =
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
| VISIBILITY = { ON | OFF } ]
| UNCHECKED DATA
Argumentos
assembly_name
Es el nombre del ensamblado que se desea modificar. assembly_name ya debe existir en la base de datos.FROM <client_assembly_specifier> | <assembly_bits>
Actualiza un ensamblado a la última copia de los módulos de .NET Framework que conservan su implementación. Esta opción sólo se puede utilizar si no hay archivos asociados con el ensamblado especificado.<client_assembly_specifier> especifica la ubicación local o de red donde se encuentra el ensamblado que se va a actualizar. La ubicación de red incluye el nombre del equipo, el nombre del recurso compartido y una ruta dentro de ese recurso compartido. manifest_file_name especifica el nombre del archivo que contiene el manifiesto del ensamblado.
<assembly_bits> es el valor binario para el ensamblado.
Deben generarse instrucciones ALTER ASSEMBLY independientes para cada ensamblado dependiente que también debe actualizarse.
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
Especifica la propiedad del conjunto de permisos de acceso al código .NET Framework del ensamblado. Para obtener más información acerca de esta propiedad, vea CREATE ASSEMBLY (Transact-SQL).VISIBILITY = { ON | OFF }
Indica si el ensamblado es visible para crear en él funciones CLR (Common Language Runtime), procedimientos almacenados, desencadenadores, tipos definidos por el usuario y funciones de agregado definidas por el usuario. Si se establece en OFF, el ensamblado se ha diseñado para que sólo se lo llame con otros ensamblados. Si ya existen objetos de base de datos CLR creados en el ensamblado, la visibilidad del ensamblado no se puede cambiar. Un ensamblado la que se haga referencia con assembly_name se carga como no visible, de forma predeterminada.UNCHECKED DATA
De forma predeterminada, ALTER ASSEMBLY genera errores si debe comprobar la coherencia de filas de tabla individuales. Esta opción permite posponer las comprobaciones para más adelante con DBCC CHECKTABLE. Si se especifica, SQL Server ejecuta la instrucción ALTER ASSEMBLY aunque existan tablas en la base de datos que contienen lo siguiente:Columnas calculadas persistentes que hacen referencia de forma directa o indirecta a métodos en el ensamblado, mediante funciones o métodos de Transact-SQL.
Restricciones CHECK que hacen referencia de forma directa o indirecta a métodos en el ensamblado.
Columnas de un tipo definido por el usuario CLR que dependen del ensamblado y el tipo implementa un formato de serialización UserDefined (no Native).
Columnas de un tipo definido por el usuario CLR que hacen referencia a vistas creadas con WITH SCHEMABINDING.
Si está presente alguna restricción CHECK, se deshabilita y se marca sin confianza. Las tablas que contienen columnas que dependen del ensamblado se marcan como que contienen datos sin comprobar hasta que se comprueban explícitamente.
Sólo los miembros de las funciones fijas de base de datos db_owner y db_ddlowner pueden especificar esta opción.
Para obtener más información, vea Implementar ensamblados.
[ DROP FILE { file_name[ ,...n] | ALL } ]
Quita de la base de datos el nombre de archivo o todos los archivos asociados con el ensamblado. Si se utiliza con ADD FILE a continuación, primero se ejecuta DROP FILE. Esto le permite reemplazar un archivo con el mismo nombre de archivo.[ ADD FILE FROM { client_file_specifier [ AS file_name] | file_bitsAS file_name}
Carga un archivo que se asociará con el ensamblado, como código de origen, archivos de depuración u otra información relacionada, en el servidor y lo hace visible en la vista de catálogo sys.assembly_files. client_file_specifier especifica la ubicación desde la que se cargará el archivo. Se puede utilizar file_bits en lugar de especificar la lista de valores binarios que forman el archivo. file_name especifica el nombre con el que el archivo debe almacenarse en la instancia de SQL Server. file_name debe especificarse si se especifica file_bits y es opcional si se especifica client_file_specifier. Si no se especifica file_name, se usa la parte file_name de client_file_specifier como file_name.
Notas
ALTER ASSEMBLY no interrumpe las sesiones en ejecución actuales que están ejecutando código en el ensamblado que se va a modificar. Las sesiones actuales completan su ejecución utilizando los bits no modificados del ensamblado.
Si se especifica la cláusula FROM, ALTER ASSEMBLY actualiza el ensamblado en relación con las últimas copias de los módulos proporcionados. Puesto que pueden existir funciones CLR, procedimientos almacenados, desencadenadores, tipos de datos y funciones de agregado definidas por el usuario en la instancia de SQL Server ya definidas en el ensamblado, la instrucción ALTER ASSEMBLY las vuelve a enlazar con la última implementación del ensamblado. Para realizar la operación de volver a enlazar, los métodos que asignan a funciones CLR, procedimientos almacenados y desencadenadores ya deben existir en el ensamblado modificado con las mismas firmas. Las clases que implementan tipos definidos por el usuario CLR y funciones de agregado definidas por el usuario deben cumplir los requisitos de ser un tipo o un agregado definido por el usuario.
Advertencia |
---|
Si no se especifica WITH UNCHECKED DATA, SQL Server intenta evitar que ALTER ASSEMBLY se ejecute si la nueva versión de ensamblado afecta a los datos existentes de tablas, índices u otros sitios permanentes. No obstante, SQL Server no garantiza que las columnas, las vistas indizadas, las expresiones o los índices calculados serán coherentes con las rutinas y los tipos subyacentes cuando se actualice el ensamblado CLR. Al ejecutar ALTER ASSEMBLY, tenga cuidado de que no se produzcan discrepancias entre el resultado de una expresión y los valores basados en esa expresión que se almacenen en el ensamblado. |
ALTER ASSEMBLY cambia la versión de ensamblado. La cultura y el símbolo (token) de clave pública del ensamblado no varían.
La instrucción ALTER ASSEMBLY no se puede usar para cambiar lo siguiente:
Las firmas de funciones CLR, procedimientos almacenados y desencadenadores en una instancia de SQL Server que hace referencia al ensamblado. ALTER ASSEMBLY genera errores cuando SQL Server no puede volver a enlazar objetos de base de datos .NET Framework en SQL Server con la nueva versión del ensamblado.
Las firmas de métodos en el ensamblado que se llaman desde otros ensamblados.
La lista de ensamblados que dependen del ensamblado, como aparece en la propiedad DependentList del ensamblado.
La posibilidad de indización de un método, a menos que no existan índices o columnas calculadas persistentes que dependan de ese método, de forma directa o indirecta.
El atributo del nombre de método FillRow para funciones con valores de tabla CLR.
La firma de los métodos Accumulate y Terminate para agregados definidos por el usuario.
Ensamblados del sistema.
Propiedad del ensamblado. En su lugar, use ALTER AUTHORIZATION (Transact-SQL).
Además, para ensamblados que implementan tipos definidos por el usuario, se puede utilizar ALTER ASSEMBLY para realizar sólo los siguientes cambios:
Modificar métodos públicos de la clase de tipo definido por el usuario, siempre que no se modifiquen firmas ni atributos.
Agregar nuevos métodos públicos.
Modificar métodos privados de cualquier manera.
Los campos que forman parte de un tipo definido por el usuario de serialización nativa, incluidos los miembros de datos o clases base, no pueden cambiarse mediante ALTER ASSEMBLY. No se admiten otros cambios.
Si no se especifica ADD FILE FROM, ALTER ASSEMBLY quita los archivos asociados con el ensamblado.
Si se ejecuta ALTER ASSEMBLY sin la cláusula de datos UNCHECKED, se realizan comprobaciones para comprobar que la nueva versión del ensamblado no afecta a los datos existentes en las tablas. Dependiendo de la cantidad de datos que sea necesario comprobar, puede afectar al rendimiento.
Permisos
Se requiere el permiso ALTER en el ensamblado. Algunos requisitos adicionales son los siguientes:
Para modificar un ensamblado cuyo conjunto de permisos existente es EXTERNAL_ACCESS, el inicio de sesión de SQL Server debe tener el permiso EXTERNAL ACCESS en el servidor.
Para modificar un ensamblado cuyo conjunto de permisos existente es UNSAFE debe pertenecer a la función fija de servidor sysadmin.
Para cambiar el conjunto de permisos de un ensamblado a EXTERNAL_ACCESS, el inicio de sesión de SQL Server debe tener el permiso EXTERNAL ACCESS en el servidor.
Para cambiar el conjunto de permisos de un ensamblado a UNSAFE debe pertenecer a la función fija de servidor sysadmin.
Debe pertenecer a la función fija de servidor sysadmin para especificar WITH UNCHECKED DATA.
Para obtener más información acerca de los conjuntos de permisos de ensamblado, vea Diseñar ensamblados.
Ejemplos
A. Actualizar un ensamblado
En el siguiente ejemplo se actualiza el ensamblado ComplexNumber a la última copia de los módulos de .NET Framework que conservan su implementación.
[!NOTA]
El ensamblado ComplexNumber se puede crear ejecutando los scripts de ejemplo UserDefinedDataType. Para obtener más información, vea User-Defined Type (UDT) Sample.
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. Agregar una archivo para asociarlo con el ensamblado
En el siguiente ejemplo se carga el archivo de código de origen Class1.cs para asociarlo con el ensamblado MyClass. En este ejemplo se asume que el ensamblado MyClass ya está creado en la base de datos.
ALTER ASSEMBLY MyClass
ADD FILE FROM 'C:\MyClassProject\Class1.cs';
C. Cambiar los permisos de un ensamblado
En el ejemplo siguiente se cambia el conjunto de conjunto de permisos del ensamblado ComplexNumber de SAFE a EXTERNAL ACCESS.
ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS
Vea también