sqlserver触发器往mysql插入数据错误问题

nikolaichow 2013-08-07 11:01:58
我在sqlserver查询分析器中输入语句 能够成功执行

insert into OPENROWSET( 'MSDASQL', 'DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; PORT=3306;DATABASE=wpf; USER=root;PASSWORD=w001; STMT=set names gb2312; OPTION=2049','select * from tAbc;' ) select 0,'admin','admin','0','test1','2013-08-05 15:00:26','1','0','0','','','','0','0'


但是我封装成sqlserver的触发器 提示错误

alter trigger mysqlTest_1 on [t_1mysql]
for insert,update
as
declare @var1 varchar(max),@var2 varchar(max),@txt nvarchar(max)
select @var1=F1 from inserted
set @txt=
'insert into OPENROWSET(
''MSDASQL'',
''DRIVER={MySQL ODBC 5.1 Driver};
SERVER=localhost;
PORT=3306;DATABASE=wpf;
USER=root;PASSWORD=w001;
STMT=set names gb2312;
OPTION=2049'',''select * from tAbc;''
)
select 0,''admin'',''admin'',''0'','''+isnull(@var1,'')+''',''2013-08-05 15:00:26'',''1'',''0'',''0'','''','''','''',''0'',''0'''

exec sp_executesql @txt

当执行语句

insert into t_1mysql
values('test1','abc')

错误信息为:
链接服务器"(null)"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[MySQL][ODBC 5.1 Driver]Optional feature not supported"。
消息 7391,级别 16,状态 2,第 1 行
无法执行该操作,因为链接服务器 "(null)" 的 OLE DB 访问接口 "MSDASQL" 无法启动分布式事务。


请问是什么问题?
...全文
303 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
poxk1493727 2014-09-11
  • 打赏
  • 举报
回复
楼主大牛啊 求sqlserver触发器往mysql插入数据的程序啊
Shawn 2013-08-08
  • 打赏
  • 举报
回复
引用 4 楼 nikolaichow 的回复:
[quote=引用 3 楼 wwwwgou 的回复:] #1.由于命令A和它所触发的触发器T中的代码是同一个事务,要么都成功,要么都失败。但是你用到了链接服务器,所以就要启动分布式事务,才可以正常执行。 #2.即使启用分布式事务,也是应用在SQLSERVER和SQLSERVER之间。异构数据库之间,应该是不行的。 所以,楼主就不要这样用了。 建议:触发器中的数据,先INSERT到本地的另外一张表中,再写个JOB,监控此表,把数据同步到MYSQL数据表。
弱弱得问一下JOB是什么?[/quote] SQL SERVER代理服务中,建立的“作业”,英文名“JOB”
nikolaichow 2013-08-08
  • 打赏
  • 举报
回复
引用 3 楼 wwwwgou 的回复:
#1.由于命令A和它所触发的触发器T中的代码是同一个事务,要么都成功,要么都失败。但是你用到了链接服务器,所以就要启动分布式事务,才可以正常执行。 #2.即使启用分布式事务,也是应用在SQLSERVER和SQLSERVER之间。异构数据库之间,应该是不行的。 所以,楼主就不要这样用了。 建议:触发器中的数据,先INSERT到本地的另外一张表中,再写个JOB,监控此表,把数据同步到MYSQL数据表。
弱弱得问一下JOB是什么?
KevinLiu 2013-08-07
  • 打赏
  • 举报
回复
MSDASQL" 无法启动分布式事务 configure MSDTC first. Read this article:http://support.microsoft.com/kb/2027550/zh-cn
Shawn 2013-08-07
  • 打赏
  • 举报
回复
#1.由于命令A和它所触发的触发器T中的代码是同一个事务,要么都成功,要么都失败。但是你用到了链接服务器,所以就要启动分布式事务,才可以正常执行。 #2.即使启用分布式事务,也是应用在SQLSERVER和SQLSERVER之间。异构数据库之间,应该是不行的。 所以,楼主就不要这样用了。 建议:触发器中的数据,先INSERT到本地的另外一张表中,再写个JOB,监控此表,把数据同步到MYSQL数据表。
nikolaichow 2013-08-07
  • 打赏
  • 举报
回复
引用 1 楼 SmithLiu328 的回复:
MSDASQL" 无法启动分布式事务 configure MSDTC first. Read this article:http://support.microsoft.com/kb/2027550/zh-cn
若改成

alter trigger mysqlTest_1 on [t_1mysql]
for insert,update
as
declare @var1 varchar(max),@var2 varchar(max),@txt nvarchar(max)
select @var1=F1 from inserted
set @txt=
'insert into OPENROWSET(
 ''MSDASQL'',
 ''DRIVER={MySQL ODBC 5.1 Driver};
 SERVER=100.100.100.1;
 PORT=3306;DATABASE=wpf;
 USER=root;PASSWORD=w001;
 STMT=set names gb2312;
 OPTION=2049'',''select * from tAbc;''
 )
select 0,''admin'',''admin'',''0'','''+isnull(@var1,'')+''',''2013-08-05 15:00:26'',''1'',''0'',''0'','''','''','''',''0'',''0'''
 
exec  sp_executesql @txt
则提示错误 链接服务器"(null)"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[MySQL][ODBC 5.1 Driver]Host 'dataserver' is not allowed to connect to this MySQL server"。 消息 7303,级别 16,状态 1,第 1 行 无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "MSDASQL" 的数据源对象。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧