SQL Server 2000Visual C++ 7.1Visual Studio 6Visual C++ 7.0DBAVisual Studio .NET 2003Windows 2000Visual C++ 6.0中级开发Visual StudioSQL ServerSQLWindowsC++
SQL Server 扩展存储过程,用于发送 UDP 消息






3.20/5 (11投票s)
2004年12月5日
1分钟阅读

82632

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++ 库目录。
这是包含以下更改的新版本
- 错误修复。由于我使用了具有 255 个字符限制的
srv_paramdata()
,因此 UDP 消息文本的长度限制为 255 个字符。我将 SQLAnnounceProc.c 中的代码更改为使用srv_paraminfo()
。其余参数仍然具有 255 个字符的限制。 - 我将项目转换为 VS 2003。
- 使用前请测试!