朋友你有没有遇到这种情况:
在本地查询分析器中想获取远程数据库数据,
SELECT * INTO # FROM openrowset('sqloledb','IP';'sa';'','SELECT * FROM db..t')
只要你电脑能连接得上这服务器,这句肯定可以执行的。但你看下面这种情况:
BEGIN TRAN
SELECT * INTO # FROM openrowset('sqloledb','IP';'sa';'','SELECT * FROM db..t')
COMMIT TARN
会提示以下:
'
服务器: 消息 7391,级别 16,状态 1,行 2
该操作未能执行,因为 OLE DB 提供程序 'sqloledb' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'sqloledb' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
'
遇到这种情况怎么办?
第一步:“开始”->“程序”->“sql企业管理器”,找到本地服务器,右键->“属性”,“常规”选项页面中“自动启动MSDTC”一定要选上。
第二步:“开始”-“设置”-“控制面板”->“管理工具”->“组件服务”,在“组件服务”->“计算机”->“我的电脑”,右键属性
选择“MSDTC”页面,点击“安全性设置”,“允许远程客户端”,“允许远程管理”,“允许入站”,“允许出站”,“不要求进行验证”,这五项要选上。还有就是账户:必需是“NT AUTHORITY/NetworkService”。
OK,经上面设置了把SQL服务器重启。再把远程服务器电脑和上面一样设置即可。
我们再来试下刚才的SQL
BEGIN TRAN
SELECT * INTO # FROM openrowset('sqloledb','IP';'sa';'','SELECT * FROM db..t')
COMMIT TARN
怎么样,此时此刻你的脸上充满幸福的微笑了吧。对了,使用Openrowset 和链接服务器是一样的效果。快试试吧。