2009-07-27 11 views
5

Tengo un procedimiento CLR almacenado que hace referencia a un conjunto creado en VS 2008 que utiliza Linq. Vamos a llamar a este conjunto 'MyLib'.Uso de ensamblados .Net 3.5 SQL 2005 CLR?

Parece que no puedo obtener 'MyLib' en mi base de datos SQL 2005. Hago lo siguiente:

CREATE ASSEMBLY [MyLib] 
    FROM 'C:\MyLib\bin\Release\MyLib.dll' 
WITH PERMISSION_SET = UNSAFE 
GO 

Pero me sale el error:

Assembly 'MyLib' references assembly 'system.core, version=3.5.0.0, 
culture=neutral, publickeytoken=b77a5c561934e089.', which is not present 
in the current database. SQL Server attempted to locate and automatically 
load the referenced assembly from the same location where referring assembly 
came from, but that operation has failed (reason: 2(error not found)). Please 
load the referenced assembly into the current database and retry your request. 

¿Existe una manera más fácil de obtener todos los conjuntos .NET 3.5 en el SQL 2005 CLR, que no sea yo escribir un comando 'CREATE ASSEMBLY' para cada uno? ¿Hay alguna forma de "mejores prácticas" para hacer esto?

+0

Uno pensaría que alguien se tomó la molestia de hacer un script grande T-SQL para la gran cantidad de ellos y que lo ponga en la red ... pero No puedo encontrar uno :( – Thorarin

+0

De la documentación: SQL Server también busca ensamblajes dependientes de este ensamblado en la misma ubicación y también los carga. – Suncat2000

Respuesta

2

Salida this thread. Básicamente, tiene que cargar manualmente los nuevos ensamblajes, en lugar de cargarlos automáticamente desde el caché de ensamblados global.

(CLR para la versión 2.0 y 3.5 es el mismo)

+0

¡Dulce! ¡Seguí ese hilo y funciona! Impresionante :) –

+0

Se olvidó de publicar el código que lo hizo funcionar: CREAR ENSAMBLE [System.Core] \t FROM 'C: \ Archivos de programa \ Asambleas de referencia \ Microsoft \ Framework \ v3.5 \ System.Core.dll' CON PERMISSION_SET = INSEGURA GO Una vez hecho esto, el ensamblado 'MyLib' funcionó a la perfección. –

+0

También olvidado: ALTER [base de datos] SET TRUSTWORTHY ON – Suncat2000

1

SQL Server 2005 incluido con el v2.0.50727 CLR - que hizo NO incluye LINQ por el momento.

No podrá utilizar LINQ en los ensamblados CLR de SQL 2005; debe apegarse al conjunto original de ensamblados .NET 2.0.

La única pequeña posibilidad que existe es incluir todos los ensamblajes de 3.5 sistemas pertinentes (es decir, System.Linq, System.Data.Linq) en su implementación; todos están basados ​​en .NET 2.0 CLR de modo que pueda ser posible - Personalmente, probablemente no me molestaría en intentarlo, parece demasiado trabajo y demasiada molestia.

SQL Server 2008 R2 probablemente se envíe con un nuevo CLR incluido (solo supongo, no hay confirmación oficial o anuncio disponible todavía, AFAIK).

Marc

+0

Este proyecto es uno que acabo de tomar y el codificador anterior comenzó a agregar Linq a TODO, pero nunca intenté volver a registrar el ensamblado en SQL 2005. Si tiene razón, tengo un montón de trabajo en camino. En secreto, espero que esté equivocado (entonces que no tengo que hacer mucho trabajo), pero no tengo mucha esperanza para eso. –

+0

si revisas el hilo en el enlace en la publicación de Thorarin, dudo que tengas mucha suerte :-( –