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

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

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

В наличии

Использование 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. ну и буферировать… всем удачи.

has been added to your cart:
Оформление заказа