SQL连接问题 在线等 急!!!!

liuweicai772 2007-06-24 02:22:24
问题是这样的:
一:目的:
   A服务器(机器名 server)上安装了SQL7.0的数据库 B服务器上安   装了SQL2000的数据库,我现在需要在B服务器上查到A服务器SQL   中的数据

二:我的解决方法

  在B服务器的查询分析器中执行了这样的语句
  EXEC sp_addlinkedserver @server='server,
@srvproduct='', @provider='SQLOLEDB',@datasrc='server'
  执行了后在查询分析器中写 select * from server.database.dbo.table
  执行查询有结果  可是写成存储过程后 保存不了 提示信息是:
  错误号17:SQLSERVER 不存在或者拒绝访问

  但是执行 select * from server.database.dbo.table 这样语句都是有结果的
  在ODBC数据源测试连成功
 
  请问大家有什么好的解决方法吗?在线等 急!!! 拜托大家伙了
...全文
388 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangpf1986 2008-12-04
  • 打赏
  • 举报
回复
你试试在两台主机的host文件中相互加一下解析
yangjianw2004 2007-08-04
  • 打赏
  • 举报
回复
create proc xxx
as
begin
insert into server1.数据库名.dbo.表名
(jj,bb)
select jj,bb from
OPENDATASOURCE('SQLOLEDB', 'Data Source=A;User ID=sa;Password=').数据库名字.表名1 a,
OPENDATASOURCE('SQLOLEDB', 'Data Source=A;User ID=sa;Password=').数据库名字.表名2 b
where a.id=b.id
end
楼主可以这样试一下
liuweicai772 2007-08-04
  • 打赏
  • 举报
回复
这一晚上没白熬啊! 这个问题有功克了 先不着急睡觉 把解决方法告诉大家先!

我的环境是 server1 操作系统是 xp pro sp2 SQLSERVER pro SP4 所在的组是 admi
SERVER2 操作系统是 win2003 server SQLSERVER 企业版 所在的组是 admi

我在server1上
第一:
控制面板->管理工具->组件服务-> 组件服务->计算机->我的电脑 右键我的电脑
->属性->MSDTC->安全性配置 选择 远程DTC访问、允许远程客户端、允许远程管理、允许入站、
允许出站、不要求进行验证
第二:
在SQLSERVER 中将 自动运行ms dtc(d) 选上 否则每次开机或重起都要去启动MSDTC



在server2上
第一:打开“管理工具”的“组件服务”。
a. 浏览至"启动管理工具"。 b. 选择"组件服务"。 c. 展开"组件服务"树,然后展开"我的电脑"。 d. 右键单击"我的电脑",然后选择"属性"。 在 MSDTC 选项卡中,确保选中了下列选项:
网络 DTC 访问 网络管理 网络事务XA 事务
另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。4、重启MS DTC服务。
第二: 在SQLSERVER 中将 自动运行ms dtc(d) 选上 否则每次开机或重起都要去启动MSDTC


这样我的分布式事务就可以正常执行了,结果OK!

如果哪里交代的不清楚 请见谅啊 ,一晚上没睡了 头有点晕
liuweicai772 2007-08-04
  • 打赏
  • 举报
回复
一夜未睡,找到答案 在server1数据库上 右键-> 属性->连接 中 将ANSI_NULLS 和ANSI_WARNINGS 都选上就解决了问题! 这个问题解决了可是又出了新问题!
考虑 是insert 语句 所以就要考虑加上事物 也就是分布式事物处理 .server1和server 2都打开了 ms dtc 服务
(我的 操作系统是 winxp pro sp2 SQL2000 PRO ) 我的存储过程如下
CREATE proc xxx
as
begin distributed tran

insert into server2.数据库.dbo.库表名
(jj,bb)
SELECT a.jj,b.bb
FROM 表1 a,表2 b where a.id=b.id

select '倒数据成功!!' as '提示'

if @@error = 0
commit tran
else
rollback tran


在server1 的查询分析器中执行 exec xxx 提示:

服务器: 消息 7391,级别 16,状态 1,过程 UP_FD_SCSJ,行 29
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

liuweicai772 2007-08-03
  • 打赏
  • 举报
回复
我现在两个服务器都改成SQLSERVER 2000 了
在server1的查询分析器中 执行
EXEC sp_addlinkedserver @server='server2', @srvproduct='bt_zb',
@provider='SQLOLEDB', @datasrc='server2'

在企业管理器中创建存储过程
create proc xxx
as
begin
insert into server1.数据库名.dbo.表名
(jj,bb)
select jj,bb from 表名1 a,表名2 b where a.id=b.id SET ANSI_NULLS ON SET ANSI_WARNINGS ON
end
创建成功!
在查询分析器中执行 exec xxx 正常,结果正确.
但是我用DELPHI 写的程序 来读这个存储过程时 就提示
General SQL error:
异类查询要为连接设置 ANSI_NULLS 和ANSI_WARNINGS 选项.这将确保一致的查询语义,请启用这些选项,然后重新发出查询

这是为什么啊???
liuweicai772 2007-08-03
  • 打赏
  • 举报
回复
曾经的曾经:
我现在两个服务器都改成SQLSERVER 2000 了 可是问题依旧.

还是怎么来建立这个静态的LINKSERVER 啊  在查询中引用这个名字  怎么引用啊?
举个例子好吗   非常感谢 !
liuweicai772 2007-07-19
  • 打赏
  • 举报
回复
你所说的建立一个静态的LINKSERVER 是在SQL2000 里的客户 (我的笔记本B和M中间的键坏了 所以有些字打不出来,请大家见lia g)网络实用工具吗?
还是怎么来建立这个静态的LINKSERVER 啊  在查询中引用这个名字  怎么引用啊?
举个例子好吗   谢谢 !
hillhx 2007-06-25
  • 打赏
  • 举报
回复
看见你写的这个过程了么?sp_addlinkedserver,的作用是创建一个连接。
可能是你在查询分析器里创建了连接所以结果正确,而在存储过程中没有创建连接。

建议你建立一个静态的LINKSERVER,从2000的企业管理器里就可以建立,然后光引用这个静态的连接的名字就成了。

比如吧,你建立一个CNN_TO_SQL7这么一个连接,并且写好了用户名密码,测试连接通了,然后你直接在存储过程的查询中引用这个名字就好了。
liuweicai772 2007-06-25
  • 打赏
  • 举报
回复
还有新的答案吗?
liuweicai772 2007-06-24
  • 打赏
  • 举报
回复
我把存储过程直接改成了查询 在程序中直接 执行查询 在查询的条件后增加了
set ansi_nulls on set ansi_warnings on 但是一执行就提示 :
General SQL error:
异类查询要为连接设置 ANSI_NULLS 和ANSI_WARNINGS 选项.这将确保一致的查询语义,请启用这些选项,然后重新发出查询.
liuweicai772 2007-06-24
  • 打赏
  • 举报
回复
在企业管理器中存储过程中加上了 SET ANSI_NULLS on SET ANSI_WARNINGS on 后 检查语法还是提示:
Logiin failed for user '(null)'. Reason :Not associated with a trusted sql server connection

sqllong 2007-06-24
  • 打赏
  • 举报
回复
SET ANSI_NULLS on SET ANSI_WARNINGS on
放最后面
select a.*,b.* from table1 a , table2 b where a.id=b.id SET ANSI_NULLS on SET ANSI_WARNINGS on
liuweicai772 2007-06-24
  • 打赏
  • 举报
回复
我的存储过程里 使用的是多表查询
我写 select a.*,b.* from table1 a SET ANSI_NULLS on SET ANSI_WARNINGS on,
table2 b SET ANSI_NULLS on SET ANSI_WARNINGS on
where a.id=b.id
执行的时候报错啊
liuweicai772 2007-06-24
  • 打赏
  • 举报
回复
我的存储过程里 使用的是多表查询
我写 select a.*,b.* from table1 a SET ANSI_NULLS on SET ANSI_WARNINGS on,
table2 b SET ANSI_NULLS on SET ANSI_WARNINGS on
执行的时候报错啊
liuweicai772 2007-06-24
  • 打赏
  • 举报
回复
还有好的办法吗??
sqllong 2007-06-24
  • 打赏
  • 举报
回复
select * from yourTable SET ANSI_NULLS on SET ANSI_WARNINGS on
liuweicai772 2007-06-24
  • 打赏
  • 举报
回复
哪个错误信息是: 登录失败 用户' (空) ' . 理由是:不与信任SQL Server的连接
liuweicai772 2007-06-24
  • 打赏
  • 举报
回复
怎么打开ANSI_NULLS 和 ANSI_WARNINGS 啊
liuweicai772 2007-06-24
  • 打赏
  • 举报
回复
在B服务器上的SQL2000 企业管理器 中创建存储过程失败,但是在查询分析器中创建成功.
到企业管理器中修改存储过程 检查语法时提示
Logiin failed for user '(null)'. Reason :Not associated with a trusted sql server connection

我在程序中执行 exec 储存过程名 提示错误 但是拿到查询分析器中执行
exec 存储过程名 就会有结果
sqllong 2007-06-24
  • 打赏
  • 举报
回复
试试把
ANSI_NULLS 和 ANSI_WARNINGS 选项打开
加载更多回复(2)

22,210

社区成员

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

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