首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Sql Server 2000 导入Sql Server 2000,该如何解决

2012-03-08 
Sql Server 2000 导入Sql Server 2000我有个问题想不通...我有一条SQL语句insert into [currency](currenc

Sql Server 2000 导入Sql Server 2000
我有个问题想不通...
我有一条SQL语句
insert into [currency](currency_code,currency_name,currency_rate,systemDefault,modified_date) select currency_code,currency_name,currency_rate,systemDefault,modified_date from OPENDATASOURCE('SQLOLEDB','Data Source=192.168.1.100;User ID=sa;Password=abc').Gourmet.dbo.[currency]

在查询分析器中运行完全没有问题的。。。
但我回到Delphi中用ADOConnection.execute运行就出现问题了...提示是MSDTC没有开之类的
现在我已经把SQL SERVER 2000 都打了SP3的补丁和MSDTC都开了...防火墙都设好了

但在delphi中运行就提示新的错误提示
"New transaction cannot enlist in the specified transaction coordinator"

为什么会这样的错误,一般你们是用什么控件在delphi在运行 这条插入语句的?
还有什么方法可以解决我这个问题呢?

救命啊!!!!!!!!!!!!

[解决办法]
winnt\system32\msdtc.exe
下面是MS里提供的:
此问题发生的原因在于,没有对 Microsoft 分布式事务处理协调器 (MS DTC) 进行网络访问配置。默认情况下,在运行 Windows Server 2003 的计算机上,新安装的 SQL Server 2000 中的 MS DTC 网络访问设置是禁用的。

解决方案
要解决此问题,请按照下列步骤操作: 1. 单击“开始”,指向“所有程序”,指向“管理工具”,然后单击“组件服务”。 
2. 在组件服务向导中,展开“组件服务”,然后双击“计算机”。 
3. 右键单击“我的电脑”,然后单击“属性”。 
4. 单击“MSDTC”选项卡,然后单击“安全性配置”。 
5. 在“安全配置”对话框中,单击以选中“网络 DTC 访问”复选框。 
6. 在“网络 DTC 访问”下,单击“网络事务”。 
7. 确保“DTC 登录帐户”设置为“NT Authority\NetworkService”。 
8. 单击“确定”。 
9. 在消息框中,单击“是”。 
10. 在“DTC 控制台消息”对话框中,单击“确定”。 
11. 在“系统属性”对话框中,单击“确定”。 
12. 重新启动计算机,让这些更改生效。
 

[解决办法]
数据量过大,建议不要试图在一条语句当中导入完,而是切分而若干份,如果使用的是手动事务,每一个执行分片都要进行事务启动和提交。否则的话,会因为单个事务过大,占用资源过多,而变得极其缓慢。甚至可能导致失败(如果空间不足的话),不过很可惜的是,在MSSQL当中不支持关闭事务日志,所以必须考虑目标数据库的可用磁盘空间,以及事务日志的上限。
[解决办法]
写成存储过程,放在服务器上导吧.
[解决办法]

探讨
我想也要做到starluck这样了吧

我试过。。。只是一个只有4条记录的表。都要等很久。。。再出现timeout expired

[解决办法]
今天也碰到这问题
查了查CSDN的老帖子 找到点东西
http://topic.csdn.net/t/20040423/21/3001796.html
引邹老大原话:
----------------------
--不在同一台电脑上,那可以用下面两种方法:

--如果经常访问或数据量大,建议用链接服务器

--创建链接服务器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
go

--查询示例
select * from srv_lnk.数据库名.dbo.表名

--导入示例
select * into 表 from srv_lnk.数据库名.dbo.表名

go
--处理完成后删除链接服务器
exec sp_dropserver 'srv_lnk','droplogins'
--如果只是临时访问,可以直接用openrowset
--查询示例
select * from openrowset('sqloled'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)


--导入示例
select * into 表 from openrowset('sqloled'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)



我在查询分析器内测试建立炼接服务器的第一种方法比第二重要快很多
530万数据 第一种7分55秒 第二种12分多
还是建立楼主封成存储过程 怎么说也好维护些
[解决办法]
可能是权限的问题,先用超级用户连接到192.168.1.100这个电脑, 然后再执行你的程序试试,以前也碰到这样的问题,后来也不知怎么乱搞,又行了。

用192.168.1.100这台电脑的超级用户在本机登陆。应该可以。

热点排行