1、在sql server中建立触发器,当某些条件满足时,取用户的AD信息,通过sql server的链接服务器,给相关用户发送邮件。
2、当某些条件满足时,给用户发送短信。由于公司的短信数据库在mysql 5.1(linux)上,所以要把sql server表中的数据插入到mysql表中。
功能说起来不多,从但是里面涉及到很多之前没接触过的东西,在一些功能点上花费了很多时间。
功能1详细
(1)
先说第一个功能,想获取用户的AD信息,就要先建AD链接服务器和登陆权限
Sql代码
关于sp_addlinkedsrvlogin大家可以看一下http://technet.microsoft.com/zh-cn/library/ms190479.aspx、http://technet.microsoft.com/zh-cn/library/ms189811.aspx里面有详细的介绍
(2)取AD信息
Sql代码
(3)配置SQL SERVER数据库邮件
这里不多说了,网上有很多例子
(4)调用数据库邮件存储过程(msdb.dbo.sp_send_dbmail)
Sql代码
功能2详细
(1)分布式事务问题处理
要实现短信功能,需要把数据insert到mysql的数据库表中。在sql server触发器中调用mysql链接服务器进行mysql表的insert操作会产生分布式事务。由于mysql部署在linux系统的机器上,sql server是在windows平台上,由于操作系统不同无法采用windows平台上的MSDTC服务,所以为避免产生分布式事务,通过 loopback 服务器链接执行远过程调用, 让此过程拥有独立的事务作用域(适用于 SQL Server 2008 )具体步骤,
Sql代码
然后用把insert操作放到一个存储过程中,再用loopback调用这个存储过程,这样就可避免远过程调用而将本地事务提升为分布事务了。但是这样做会存在不安全因素,但是对于我们公司内网来说基本不存在这个问题。
Sql代码
(2)无法向mysql插入中文字符
本次mysql数据库版本为5.1,odbc驱动为5.2,采用链接服务器方式访问mysql时,不能插入中文字符。mysql数据库是UTF-8的编码,理论上是可以支持中文字符的,但是插入中文字符为空。经过多方面的查找,发现是由于mysql与odbc驱动的版本不一致而导致的这种问题,换成5.1版本的odbc驱动,问题得以解决。由于数据库直连的方式会涉及很多其它方面的问题,所以开发时尽量采用相同版本,避免不必要的麻烦。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。