вторник, 24 июля 2012 г.

.NET assembly in MS SQL server. Привязка сборки .Net к MS SQL.

Возникла задача привязать сборку .net к sql серверу. Как оказалось все просто.
1. Не стоит пытаться привязать к SQL 2005, 2008 сборку .NET 4.0 вот тут про это писано. Ждем SQL 2012.
2. Как посмотреть какая версия CLR сейчас доступна:
select * from sys.dm_clr_properties
у меня результат был такой:
directory    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\
version    v2.0.50727
state    CLR is initialized
Не долго думая я забахал проект ClassLibrary именно во 2 фреймворке.
Что-то типа того:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SqlServer.Server;

namespace hwsql
{
    public class msql
    {
        public msql()
        {
        }
           
        [SqlProcedure]
        public static void HelloWorld(string inputString,out string outString) 
        {
               outString=inputString+"!!!";
        }
       
    }
}
Дальше нужно было заругить полученную dll. Все сделал как тут и тут написано.
Т.е. включил clr интеграцию или вернее разрешил и задал опицию базы trustworthy.

EXEC sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO

ALTER DATABASE BANKDBTEST SET TRUSTWORTHY ON

Теперь можно регистрировать ассембли(сборку). Все тоже как бы элементарно:

CREATE ASSEMBLY hwsql
FROM 'C:\massembly\hwsql.dll'
WITH PERMISSION_SET = SAFE

понятно, что путь должен быть на серваке. Кстати все это можно делать через графический интерфейс Microsoft SQL Management Studio. На базе в Programmability-Assemblyes.

Теперь самое интересное - создаем хранимую процедуру.
CREATE PROCEDURE mNetAssemblyHello
(
@in nvarchar(200),
@out nvarchar(MAX) OUTPUT
)
AS EXTERNAL NAME hwsql.[hwsql.msql].HelloWorld


Вот тут есть интересная штука имя неймспейса и класса рекомендуется задавать после имени зарегистрированного на сервере ассембли, т.е. я назвал ассембли hwsql и намеспейс у меня так же зовется получим конструкцию hwsql.[hwsql.msql].HelloWorl тут так написано

Еще статьи на эту тему:
тут и тут, вот тут интересно, еще. Ну а это обязательно читать. Introduction to SQL Server CLR Integration