gifts2017

Использование CLR для доступа к метаданным на MSSQL сервере.

Опубликовал Михаил Швец (MiCe) в раздел Программирование - Практика программирования

Использование CLR для доступа к метаданным на MSSQL сервере.

Метод основан на использовании CLR интеграции. ковырялся из любопытства. Может кому пригодятся наработки. MSSQL не ниже 2005 сервера

using System.IO;
using System.IO.Compression;
using System.Data.SqlTypes;
namespace MysqlFunc
public partial class MysqlFunc
{
  [SqlFunction()]
    public static SqlBytes sqldeflate(SqlBytes param)
    {
        DeflateStream deflstrm = new System.IO.Compression.DeflateStream(param.Stream, CompressionMode.Decompress);
        return new SqlBytes(deflstrm);
    }

    [SqlFunction()]
    public static SqlBytes sqlinflate(SqlBytes param)
    {
        DeflateStream deflstrm = new System.IO.Compression.DeflateStream(param.Stream, CompressionMode.Compress);
        return new SqlBytes(deflstrm);
    }
 }

На сервере sql нужно выполнить следующий скрипт однократно
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO


Это разрешит использование CLR.
теперь подключим наш проект

CREATE ASSEMBLY [SqlMyProj]
AUTHORIZATION [dbo]
FROM 'D:\\programmables\\SqlZlib_UTF8\\obj\\Release\\SqlMyProj.dll'
WITH PERMISSION_SET = SAFE
GO

Теперь объявим функции
CREATE FUNCTION [dbo].[CLRdeflate](@inbyte [varbinary](max))
RETURNS [varbinary](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlMyProj].[MysqlFunc.MysqlFunc].[sqldeflate]
GO

CREATE FUNCTION [dbo].[CLRinflate](@inbyte [varbinary](max))

RETURNS [varbinary](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlMyProj].[MysqlFunc.MysqlFunc].[sqlinflate]
GO

Итак  теперь мы можем использовать ныши функции в конструкции select CLRdeflate(BinaryData) from dbo.config where FileName='ff79ffbb-6cae-4996-8c65-181ed5e6cb9d.0'

Код писался на скорую... Для нормальногосжатия нужно будет либо написать обертку для zlib1.dll или использовать zlib.net от componentace и также дописать функции для работы с utf8. ну и буферировать... всем удачи.

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Gamm (Gamm) 29.07.09 10:52
2. Михаил Швец (MiCe) 29.07.09 10:52
млин... почему не добавляется текст статьи?
3. Михаил Швец (MiCe) 29.07.09 12:07
=)... текст вызвал подозрение на взлом... хотя я обрамлял тэгом code
Tatitutu; +1 Ответить
5. Armando Armando (Armando) 14.08.16 21:49
Не совсем понял что с этим делать. Если компилировать то как? Компилятор csc.exe ошибку выдает