SQL Server在线程中触发并运行CLR方法

时间:2015-04-07 08:31:52

标签: sql-server-2008 asynchronous redis sqlclr

我想将数据更改记录到sql update trigger中的redis db,由c#dll调用。 但我不想让触发延迟。好像日志记录redis操作异步。

有没有办法让这种情况发生?

1 个答案:

答案 0 :(得分: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 {{1},则会引发一些问题实践。