Não há suporte para usar procedimentos armazenados estendidos ou SP_OA procedimentos armazenados para carregar o CLR no SQL Server

Versão original do produto: SQL Server
Número de KB original: 322884

Resumo

SQL Server versões 2005 e posteriores hospedam CLR (Common Language Runtime) e dão suporte a procedimentos, funções, gatilhos, tipos e agregações que são escritos em idiomas CLR. Nessas versões, você não pode carregar CLR usando procedimentos armazenados estendidos ou sp_OA procedimentos armazenados.

Versão original do produto: SQL Server
Número de KB original: 322884

Mais informações

O assembly System.Runtime.InteropServices .NET Framework fornece um ambiente robusto para invocar assemblies de código não gerenciado. No entanto, há várias discordâncias técnicas entre as implementações internas do CLR e SQL Server.

Threading

Para aumentar o desempenho, o CLR implementa o Armazenamento Local do Thread.

Além disso, o CLR usa apenas agendamento baseado em thread e não dá suporte ao agendamento do modo de fibra. No entanto, SQL Server pode usar o agendamento do modo de fibra. Para configurar essa propriedade, execute o sp_configure procedimento armazenado usando a opção de pooling leve. Para obter mais informações sobre este tópico, confira opção de configuração do servidor de pools leves.

Memória

O uso de procedimentos armazenados estendidos e a Automação OLE são executados no espaço de endereço de memória virtual da memória de SQL Server. O padrão SQL Server memória é apenas uma fração da memória que SQL Server pode potencialmente usar e o CLR compete com quaisquer implementações existentes para esses recursos de memória.

Interoperabilidade COM

Esta seção aborda especificamente o uso da Automação OLE no SQL Server e se aplica a objetos COM em processo e fora de processo. Os metadados de assembly para interfaces de função implementam um mecanismo digitado para quaisquer invocações.

Como parte desse design, o wrapper COM Callable para um assembly deve usar um mecanismo externo de mapeamento de um ClassID para um membro de uma classe gerenciada. Devido a esse mapeamento explícito, não há capacidade de uma perspectiva não gerenciada de estabelecer uma lista raiz de interfaces disponíveis.

O procedimento sp_oaCreate armazenado estendido usa a IUnknown::QueryInterface interface para determinar o suporte do objeto para uma interface específica. A interoperabilidade entre CLR e código não gerenciado depende da interface IDispatch para implementar interfaces. Como não há equivalente a um QueryInterface método em um assembly baseado em CLR, você não pode criar uma instância do objeto.