Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использование внешней dll в SQL 2008  [new]
AlexDav
Member

Откуда:
Сообщений: 3
Коллеги, подскажите возможные варианты решения проблемы:
есть dll с библиотекой функций, описание этих функций, и работоспособность вызова функций через MS Excel. Надо научиться напрямую работать из SQL с этими функциями. Вариант использования Excelя, как прослойки сделан и работает с кучей проблем (медленно, не выгружается Excel из памяти и т.п.). Исходных кодов библиотеки нет. Можно ли обращаться к внешней библиотеке из SQL ?
26 июн 09, 17:44    [7349793]     Ответить | Цитировать Сообщить модератору
 Re: Использование внешней dll в SQL 2008  [new]
Kiril
Member

Откуда: Болгарии
Сообщений: 39
AlexDav,

Можна. Extended stored procedure, CLR Integration.
26 июн 09, 17:59    [7349907]     Ответить | Цитировать Сообщить модератору
 Re: Использование внешней dll в SQL 2008  [new]
AlexDav
Member

Откуда:
Сообщений: 3
Kiril, спасибо
Попробую разобраться. Если У вас есть пример кода, то буду Вам очень благодарен.
26 июн 09, 18:54    [7350176]     Ответить | Цитировать Сообщить модератору
 Re: Использование внешней dll в SQL 2008  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4255
а какие функции вас интересуют?
26 июн 09, 20:34    [7350361]     Ответить | Цитировать Сообщить модератору
 Re: Использование внешней dll в SQL 2008  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
AlexDav,

Database Engine Extended Stored Procedure Programming
27 июн 09, 18:12    [7351427]     Ответить | Цитировать Сообщить модератору
 Re: Использование внешней dll в SQL 2008  [new]
AlexDav
Member

Откуда:
Сообщений: 3
Всем спасибо за помощь, в итоге разобрался и все получилось.

Из забавных проблем озвучу следующие:
1. При компиляции библиотеки из среды получаемый файл dll почему-то не подключается, а из командной строки все работает
2. Если надо, как и мне использовать совсем внешнюю библиотеку, то базу данных надо перевезти в режим разрешения для внешних процедур и подключать библиотеку в режиме UNSAFE !!!

Alter database ХХХ
Set TRUSTWORTHY On
go

-- добавить сборку
--CREATE ASSEMBLY assembly_name from 'D:\Test\ххх.dll' WITH PERMISSION_SET = UNSAFE


Приведу мемного кода для тех, кто как и я эту возможность еще не использовал

-- разрешить использование внешних сборок
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

-- добавить сборку
CREATE ASSEMBLY helloworld_assembly from 'D:\Test\helloworld.dll' WITH PERMISSION_SET = SAFE
go

-- создать процедуру
CREATE PROCEDURE hello
(@i nchar(25) OUTPUT)
AS
EXTERNAL NAME helloworld_assembly.HelloWorldProc.HelloWorld
go

-- Выполнить процедуру
DECLARE @J nchar(25)
EXEC hello @J output
PRINT @J
go

-------------------------------------------------------------------------------
-- удалить процедуру
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'hello')
drop procedure hello
go
-------------------------------------------------------------------------------
-- удалить сборку
IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'helloworld_assembly')
drop assembly helloworld_assembly
go

текст класса
Public Class HelloWorldProc
Public Shared Sub HelloWorld(ByRef text As String)
text = "Hello world!"
End Sub
End Class

строка для создания библиотеки
vbc /target:library helloworld.vb
27 июн 09, 20:00    [7351549]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить