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