If Err.Number = 0 Then ' Conn.CommitTrans MsgBox "成功清空本地数据库记录!" Else ' Conn.RollbackTrans MsgBox "请重新操作!" End If
Conn.Close ....................... 我测试了代码还是出现如下错误 实时错误' -2147217900 (80040e14)'; [OLE/DB provider returned message:新事务不能登记到指定的事务处理中。]set xact_abort on 这是什么意思我不明白,我就照抄了,
怎么会还有事务呢?,你在查询分析器中去执行下面这段代码,看看能否成功set xact_abort on BEGIN DISTRIBUTED TRANSACTION SELECT * INTO prostock FROM OPENROWSET('SQLOLEDB', '61.1.6.7'; 'sa'; 'a', tjdb.dbo.prostock) commit tran
实时错误' -2147217900 (80040e14)'; [OLE/DB provider returned message:新事务不能登记到指定的事务处理中。] 是分布式事务的问题的!
我改动了我的程序成功了,但执行SQL时必须把本地表删除才能做从网上导入本地, 实际上我是想把本地与网络的数据库不同点上传下载,而不是把全部的记录更新,不知如何做。 我想这样做但是不行 SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a', tjjsc.qingming.( select * from promove where id>5) ) 这样做是出错如何改动谢谢
SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where id>5')
--不是很明白你的意思,估计你是想要这样的结果吧if exists(select * from sysobjects where name='promove') begin --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了) insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where id>5') end else --如果不存在,直接创建 begin SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where id>5') end
本地 a b c d 1 2 3 4 2 4 5 6 3 3 2 3 4 2 3 4 5 4 5 6 6 3 2 3 网上 a b c d 1 2 3 4 2 4 5 6 3 3 2 3 我想把本地的数据库,4,5,6条上传到网上。
--假设是在网上的服务器执行.if exists(select * from sysobjects where name='promove') begin --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了) insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) a where not exists(select * from promove where id=a.id) end else --如果不存在,直接创建 begin SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) end
首先在本地创建一张和远程表相同的表:promove 然后,将远程表中的数据不和本地的数据相同的记录写入到本地表promoveinsert into promove select * from OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove where id not in(select id from promove)
--加条件嘛.if exists(select * from sysobjects where name='promove') begin --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了) insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where c=5') a where not exists(select * from promove where id=a.id) end else --如果不存在,直接创建 begin SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where c=5') end
出现如下错误: [OLE/DB provider returned message:无法完成延迟准备。]
不明白,要不你试试把条件加在外面if exists(select * from sysobjects where name='promove') begin --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了) insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) a where c=5 and not exists(select * from promove where id=a.id) end else --如果不存在,直接创建 begin SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) where c=5 end
Conn.BeginTrans
Err.Number = 0
sqlString = "SELECT * INTO prostock FROM OPENROWSET('SQLOLEDB', '61.16.3.16'; 'sa'; 'a', tjdb.dbo.prostock)"
Conn.Execute sqlString
If Err.Number = 0 Then
Conn.CommitTrans
MsgBox "成功清空本地数据库记录!"
Else
Conn.RollbackTrans
MsgBox "请重新操作!"
End If
Conn.Close
OPENDATASOURCE('SQLOLEDB','Data Source=192.168.0.12;User ID=;Password=').DataBase.dbo.tablex
测试出现如下错误;实时错误' -2147217900 (80040e14)';
[OLE/DB provider returned message:新事务不能登记到指定的事务处理中。]
' Conn.BeginTrans
Err.Number = 0
sqlString = "set xact_abort on " & vbcrlf & _
"BEGIN DISTRIBUTED TRANSACTION " & vbcrlf & _
"SELECT * INTO prostock FROM OPENROWSET('SQLOLEDB', '61.16.3.16'; 'sa'; 'a', tjdb.dbo.prostock) " & vbcrlf & _
"commit tran"
Conn.Execute sqlString
If Err.Number = 0 Then
' Conn.CommitTrans
MsgBox "成功清空本地数据库记录!"
Else
' Conn.RollbackTrans
MsgBox "请重新操作!"
End If
Conn.Close
Conn.Open conString
' Conn.BeginTrans
Err.Number = 0
sqlString = "set xact_abort on " & vbCrLf & _
"BEGIN DISTRIBUTED TRANSACTION " & vbCrLf & _
"SELECT * INTO prostock FROM OPENROWSET('SQLOLEDB', '61.1.6.7'; 'sa'; 'a', tjdb.dbo.prostock) " & vbCrLf & _
"commit tran"
Conn.Execute sqlString
If Err.Number = 0 Then
' Conn.CommitTrans
MsgBox "成功清空本地数据库记录!"
Else
' Conn.RollbackTrans
MsgBox "请重新操作!"
End If
Conn.Close
.......................
我测试了代码还是出现如下错误
实时错误' -2147217900 (80040e14)';
[OLE/DB provider returned message:新事务不能登记到指定的事务处理中。]set xact_abort on 这是什么意思我不明白,我就照抄了,
BEGIN DISTRIBUTED TRANSACTION
SELECT * INTO prostock FROM OPENROWSET('SQLOLEDB', '61.1.6.7'; 'sa'; 'a', tjdb.dbo.prostock)
commit tran
在企业管理器中执行SQL 出现错误代码相同:我的本地是MSDE是不是不能做这些事情。
[OLE/DB provider returned message:新事务不能登记到指定的事务处理中。]
是分布式事务的问题的!
实际上我是想把本地与网络的数据库不同点上传下载,而不是把全部的记录更新,不知如何做。
我想这样做但是不行
SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a', tjjsc.qingming.( select * from promove where id>5) )
这样做是出错如何改动谢谢
begin --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了)
insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where id>5')
end
else --如果不存在,直接创建
begin
SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where id>5')
end
a b c d
1 2 3 4
2 4 5 6
3 3 2 3
4 2 3 4
5 4 5 6
6 3 2 3
网上
a b c d
1 2 3 4
2 4 5 6
3 3 2 3
我想把本地的数据库,4,5,6条上传到网上。
begin --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了)
insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) a
where not exists(select * from promove where id=a.id)
end
else --如果不存在,直接创建
begin
SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove)
end
select * from OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove
where id not in(select id from promove)
begin --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了)
insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where c=5') a
where not exists(select * from promove where id=a.id)
end
else --如果不存在,直接创建
begin
SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where c=5')
end
[OLE/DB provider returned message:无法完成延迟准备。]
begin --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了)
insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) a
where c=5 and not exists(select * from promove where id=a.id)
end
else --如果不存在,直接创建
begin
SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) where c=5
end