65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 扩展存储过程,用于发送 UDP 消息

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.20/5 (11投票s)

2004年12月5日

1分钟阅读

viewsIcon

82632

downloadIcon

1136

SQL Server 扩展存储过程,用于发送 UDP 消息。

引言

我希望能够通知 SQL Server 表的更新,因此我修改了 Microsoft 示例扩展存储过程 xp_hello。本文的源代码将生成一个 DLL,可以将其放置在 \Program Files\Microsoft SQL Server\MSSQL\Binn 目录中,并从常规存储过程调用以发送 UDP 消息。我选择 UDP 是为了尽量减少执行时间(没有 TCP 连接问题)。

请注意,此扩展存储过程在 SQL Server 的空间中执行,因此任何错误/异常都可能导致 SQL Server 崩溃。在开发过程中,当我错误地在发送公告后调用 WSACleanup 时,就发生了这种情况,导致 SQL Server 失去网络连接。简而言之,请非常小心你在 DLL 中执行的操作,因为它可能会影响 SQL Server。

调用 SQLAnnounceProc 的 SQL Server 存储过程示例是

CREATE PROCEDURE getTestTable
AS
BEGIN SELECT * FROM TEST_TABLE
declare @status int
declare @ret varchar(513)
declare @temp as varchar(128)
SET @temp = 'got ' + CAST( @@ROWCOUNT as varchar(16) ) + ' rows'
declare @ip varchar(32)
SET @ip = '127.0.0.1'
declare @port varchar(16)
SET @port = '15555'
exec @status = master.dbo.SQLAnnounceProc @ret OUTPUT, @ip, @port, @temp
END
GO

当然,你需要创建一个名为 TEST_TABLE 的表用于测试目的,并使用以下方式从查询分析器调用它

use TEST {call getTestTable}

注释

  • 你可以通过运行 Perl 脚本 announceListen.pl 来查看 UDP 消息。
  • 将目录 \Program Files\Microsoft SQL Server\80\Tools\DevTools\Include 添加到 VC++ 包含目录。
  • 将目录 \Program Files\Microsoft SQL Server\80\Tools\DevTools\Lib 添加到 VC++ 库目录。

这是包含以下更改的新版本

  1. 错误修复。由于我使用了具有 255 个字符限制的 srv_paramdata(),因此 UDP 消息文本的长度限制为 255 个字符。我将 SQLAnnounceProc.c 中的代码更改为使用 srv_paraminfo()。其余参数仍然具有 255 个字符的限制。
  2. 我将项目转换为 VS 2003。
  3. 使用前请测试!
© . All rights reserved.