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 .
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de