2015-04-07 1 views
1

Я хочу регистрировать изменения данных в redis db внутри триггера обновления sql, вызывая C# dll. Но я не хочу задерживать триггер. Как будто работа redis работает, работает async.SQL Server запускает и запускает метод CLR в потоке

Есть ли способ сделать это возможным?

+1

Используйте инструменты, которые SQL Server предоставляет для развязки (например, служебный брокер), а не пытается выполнять работу с потоками. –

ответ

1

Попробуйте это, он использует PubSub но концепция в значительной степени то же самое:

http://blogs.msdn.com/b/frcogno/archive/2014/11/14/microsoft-sql-server-meets-redis-an-elegant-logging-platform-at-your-doorstep.aspx

Основные моменты в случае, если ссылка идет:

[SqlProcedure] 
public static void Publish(SqlString redisServerAddress, SqlInt32 redisServerPort, SqlString channel, SqlString message) 
{ 
    using (RedisConnection rc = GetRedisConnection(redisServerAddress.Value, redisServerPort.Value)) 
    { 
     rc.Publish(channel.Value, message.Value); 
    } 
} 

CREATE PROCEDURE Redis.Publish(@RedisServerAddress NVARCHAR(1024), @RedisServerPort INT, @Channel NVARCHAR(1024), @Message NVARCHAR(MAX)) 
AS EXTERNAL NAME [MindFlavor.RESP.SQLCLR]. [MindFlavor.RESP.SQLCLR.Redis].Publish; 
GO 

EXEC [MindFlavor].[Redis].[Publish] N'ubuntu-spare.pelucchi.local', 6379, N'msbackup:sql', @txt; 

Помните о том, что в некоторых (например, Azure), вы должны пометить свой clr как safe, который вызовет некоторые проблемы, если ваши dll или зависимости перейдут на clr safe.

Смежные вопросы