No se admite el uso de procedimientos almacenados extendidos o SP_OA procedimientos almacenados para cargar CLR en SQL Server

Versión del producto original: SQL Server
Número de KB original: 322884

Resumen

SQL Server 2005 y versiones posteriores hospedan Common Language Runtime (CLR) y admiten procedimientos, funciones, desencadenadores, tipos y agregados escritos en lenguajes CLR. En estas versiones, no se puede cargar CLR mediante procedimientos almacenados extendidos o sp_OA procedimientos almacenados.

Versión del producto original: SQL Server
Número de KB original: 322884

Más información

El ensamblado System.Runtime.InteropServices de .NET Framework proporciona un entorno sólido para invocar ensamblados desde código no administrado. Sin embargo, hay varias discordancias técnicas entre las implementaciones internas de CLR y SQL Server.

Threading

Para aumentar el rendimiento, CLR implementa el almacenamiento local de subprocesos.

Además, CLR solo usa la programación basada en subprocesos y no admite la programación en modo fibra. Sin embargo, SQL Server puede usar la programación en modo fibra. Para configurar esta propiedad, ejecute el sp_configure procedimiento almacenado mediante la opción de agrupación ligera. Para obtener más información sobre este tema, vea Opción de configuración de servidor de agrupación ligera.

Memoria

El uso de procedimientos almacenados extendidos y la automatización OLE se ejecutan en el espacio de direcciones de memoria virtual de la memoria de SQL Server. La memoria SQL Server predeterminada es solo una fracción de la memoria que SQL Server puede usar potencialmente y CLR compite con las implementaciones existentes para estos recursos de memoria.

Interoperabilidad com

En esta sección se aborda específicamente el uso de OLE Automation en SQL Server y se aplica tanto a objetos COM en proceso como fuera de proceso. Los metadatos de ensamblado para las interfaces de función implementan un mecanismo con tipo para cualquier invocación.

Como parte de este diseño, el contenedor que se puede llamar COM para un ensamblado debe usar un mecanismo externo de asignación de un ClassID a un miembro de una clase administrada. Debido a esta asignación explícita, no hay ninguna capacidad desde una perspectiva no administrada para establecer una lista raíz de interfaces disponibles.

El procedimiento sp_oaCreate almacenado extendido usa la IUnknown::QueryInterface interfaz para determinar la compatibilidad del objeto con una interfaz determinada. La interoperabilidad entre CLR y el código no administrado se basa en la interfaz IDispatch para implementar interfaces. Dado que no hay ningún equivalente a un QueryInterface método en un ensamblado basado en CLR, no se puede crear una instancia del objeto .