不能在手动或分布事务模式下创建新的连接

水族杰纶 2008-12-17 11:28:00
小弟今天遇到这样的问题,
两个数据库(A,B),在不同的服务器上,当然ip也不同了,
在A数据库上创建视图,
create view ppp
as
select h_name
from openrowset('sqloledb','10.0.0.9';'mjx';'sa',jxbookall.dbo.join_product_ty)

--提示: 成功

select * from ppp
--数据可以展现出来

但是我在用not in的时候就报错

1、select * from #t where 书名 not in (select h_name from ppp)

2、select * from #t where cast(书名 as varchar(100)) not in(
select cast(h_name as varchar(100)) from ppp)
3、
with kkk
as
(select h_name from openrowset('sqloledb','10.0.0.9';'mjx';'sa',jxbookall.dbo.join_product_ty)
)
select * from #t where cast(书名 as varchar(100)) not in(
select cast(h_name as varchar(100)) from kkk)
这三种写法都报同样的错误
/*链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "不能在手动或分布事务模式下创建新的连接。"。
消息 7320,级别 16,状态 2,第 2 行
无法对链接服务器 "(null)" 的 OLE DB 访问接口 "SQLNCLI" 执行查询"SELECT TOP 1 1 FROM
"jxbookall"."dbo"."join_product_ty" "Tbl1006""。*/
报链接服务器有错误,但是我查询都可以出来数据啊,不知道为什么,请大家赐教,小弟用的数据库是(sql 2005)

...全文
800 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
等不到来世 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 jinjazz 的回复:]
我这里测试环境都是sp1 -_-||
[/Quote]
可能还跟企业版,开发版,xx版有关系……
-狙击手- 2008-12-18
  • 打赏
  • 举报
回复
Microsoft SQL Server Management Studio						9.00.2047.00
Microsoft Analysis Services 客户端工具 2005.090.2047.00
Microsoft 数据访问组件 (MDAC) 2000.080.0194.00
Microsoft MSXML 2.6 3.0 4.0 6.0
Microsoft Internet Explorer 6.0.2800.1106
Microsoft .NET Framework 2.0.50727.1433
操作系统 5.0.2195
jinjazz 2008-12-18
  • 打赏
  • 举报
回复
我这里测试环境都是sp1 -_-||
水族杰纶 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 zjcxc 的回复:]
2005 sp3 补丁出来了, 先打个补丁再试试
[/Quote]
好的,謝謝老大,問題解決了,就是補丁沒打最新的~~~
zjcxc 2008-12-18
  • 打赏
  • 举报
回复
2005 sp3 补丁出来了, 先打个补丁再试试
水族杰纶 2008-12-17
  • 打赏
  • 举报
回复
水族杰纶 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zjcxc 的回复:]
检查一下 join 和 not in 的执行计划差异
一个行, 一个不行, 有点奇怪
[/Quote]
----------------------- not int 執行計劃
|--Merge Join(Right Anti Semi Join, MANY-TO-MANY MERGE:([Expr1009])=([Expr1008]), RESIDUAL:([Expr1008]=CONVERT(varchar(100),[SQLNCLI].[h_name],0)))
|--Remote Query(SOURCE:(10.0.0.9), QUERY:(SELECT "Col1020","Expr1009" FROM (SELECT "Tbl1006"."h_name" "Col1020","Tbl1006"."h_isbn" "Col1019","Tbl1006"."h_price" "Col1021",CONVERT(varchar(100),"Tbl1006"."h_name",0) "Expr1009" FROM "jxbookall"."dbo"."join_product_ty" "Tbl1006") Qry1022 ORDER BY "Expr1009" ASC))
|--Sort(ORDER BY:([Expr1008] ASC))
|--Nested Loops(Left Anti Semi Join, WHERE:([Expr1008] IS NULL))
|--Compute Scalar(DEFINE:([Expr1008]=CONVERT(varchar(100),[tempdb].[dbo].[##t].[書名],0)))
| |--Table Scan(OBJECT:([tempdb].[dbo].[##t]))
|--Row Count Spool
|--Remote Query(SOURCE:(10.0.0.9), QUERY:(SELECT TOP 1 1 FROM "jxbookall"."dbo"."join_product_ty" "Tbl1006"))


----------------Join執行計劃
|--Merge Join(Right Anti Semi Join, MANY-TO-MANY MERGE:([Expr1008])=([tempdb].[dbo].[##t].[書名]), RESIDUAL:([tempdb].[dbo].[##t].[書名]=CONVERT_IMPLICIT(nvarchar(100),[SQLNCLI].[h_name],0)))
|--Remote Query(SOURCE:(10.0.0.9), QUERY:(SELECT "Col1019","Expr1008" FROM (SELECT "Tbl1006"."h_name" "Col1019","Tbl1006"."h_isbn" "Col1018","Tbl1006"."h_price" "Col1020",CONVERT(nvarchar(100),"Tbl1006"."h_name",0) "Expr1008" FROM "jxbookall"."dbo"."join_product_ty" "Tbl1006") Qry1021 ORDER BY "Expr1008" ASC))
|--Sort(ORDER BY:([tempdb].[dbo].[##t].[書名] ASC))
|--Nested Loops(Left Anti Semi Join, WHERE:([tempdb].[dbo].[##t].[書名] IS NULL))
|--Table Scan(OBJECT:([tempdb].[dbo].[##t]))
|--Row Count Spool
|--Remote Query(SOURCE:(10.0.0.9), QUERY:(SELECT TOP 1 1
fcuandy 2008-12-17
  • 打赏
  • 举报
回复
测试了一下没有问题。
RUHANBABY 2008-12-17
  • 打赏
  • 举报
回复
关注中...
zjcxc 2008-12-17
  • 打赏
  • 举报
回复
检查一下 join 和 not in 的执行计划差异
一个行, 一个不行, 有点奇怪


中国风 2008-12-17
  • 打赏
  • 举报
回复
樓主的語句和用法沒問題。
有用過是可以的
中国风 2008-12-17
  • 打赏
  • 举报
回复
用連接服務器試試:

在創建連接時不可用事務
在調用時需要用分佈式事務
--加上這個選項
EXEC master.dbo.sp_serveroption @server=N'連接服務器名', @optname=N'rpc out', @optvalue=N'true'
水族杰纶 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zjcxc 的回复:]
你的语句在事务中吗?
什么版本?
[/Quote]
1:沒有
2:開發版
水族杰纶 2008-12-17
  • 打赏
  • 举报
回复
ps:以下語句都是可以執行得
select * from #t  B,  ppp a WHERE  b.書名=a.h_name
select h_name from ppp a,#t b where a.h_name=b.書名
zjcxc 2008-12-17
  • 打赏
  • 举报
回复
你的语句在事务中吗?
什么版本?
水族杰纶 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 roy_88 的回复:]
http://topic.csdn.net/u/20080612/22/bb2dfa83-1cf3-4a0b-9bd4-5a39e6193556.html

不會報錯
[/Quote]
回風老大:
select * from ppp
select * from #t
--都是可以正常執行得
dawugui 2008-12-17
  • 打赏
  • 举报
回复
严重关注事态进展.
CN_SQL 2008-12-17
  • 打赏
  • 举报
回复
楼主的2005补丁打到多少?
----------------------
揭贴时,请不要给我分,谢谢。
等不到来世 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 jinjazz 的回复:]
引用 25 楼 szx1999 的回复:
not in果然很诡异。。。
我测试了一下,用in可以查出来。
用not in查没有报错,但是查不出数据来!
实际上应该有数据的,并且数据类型长度完全一致。
包括数字型、字符型都查不出来。


有null的情况下是查不出数据的

SQL codeselect 1 where 1 not in(2,null)
select 1 where 1 not in(2)
[/Quote]
恩,的确如此。学习了。
看来是水族兄的环境有问题……
加载更多回复(15)

22,302

社区成员

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

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