远程链接问题

dla001 2009-11-20 04:44:02
select * from [servername].[dbname].[dbo].[tablename]
where ltrim(rtrim(id))='123456'
使用这个语句查询,20分钟查不出结果,整个表的数据4w条,我知道它用的是全表扫描。不用index也不会这么慢吧?

之前一直是这个语句在运行都没有问题,今天就不行了,为什么? 有遇到的没?如何解决?
...全文
60 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dla001 2010-07-08
  • 打赏
  • 举报
回复
响应号召,来结贴。

dla001 2009-11-20
  • 打赏
  • 举报
回复
用charindex , like ‘123456’% 都不出结果,只有 =‘ 123456’ 才会出,关键是有多少空格没人知道 ,不定的。
icelovey 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dla001 的回复:]
不用rtrim ltrim 就可以,不明白为什么,4w的数据不用index也不会这样

一个是2005  一个是2000
[/Quote]


那就建议不要用LTRIM和RTRIM了,改用CHARINDEX看看
select * from [servername].[dbname].[dbo].[tablename]
--where ltrim(rtrim(id))='123456'
where charindex('123456',id)>0


dla001 2009-11-20
  • 打赏
  • 举报
回复
顶下,怎么会遇到这东西

开发版数据库sql2000 都 500G多了,不知道怎么想的
dla001 2009-11-20
  • 打赏
  • 举报
回复
如果能不用我是不会用的,数据存的就是乱乱的,char 前面带空格数不定,还有的不是空格的空白没人知道是什么。
没有权限改动任何东西,除了自己的程序。。。。,没人听为什么!!知道痛苦了吧,程序也不是我写的。:(
luohuanquan 2009-11-20
  • 打赏
  • 举报
回复
那就直接不用rtrim ltrim 这两个函数啦
dla001 2009-11-20
  • 打赏
  • 举报
回复
不用rtrim ltrim 就可以,不明白为什么,4w的数据不用index也不会这样

一个是2005 一个是2000
--小F-- 2009-11-20
  • 打赏
  • 举报
回复
网络问题
或者是链接服务器没弄好
dawugui 2009-11-20
  • 打赏
  • 举报
回复
不同服务器数据库之间的数据操作

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

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

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

--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表

--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表
dawugui 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 dla001 的回复:]
select * from [servername].[dbname].[dbo].[tablename]
where ltrim(rtrim(id))='123456'
使用这个语句查询,20分钟查不出结果,整个表的数据4w条,我知道它用的是全表扫描。不用index也不会这么慢吧?

之前一直是这个语句在运行都没有问题,今天就不行了,为什么? 有遇到的没?如何解决?

[/Quote]
关键是你链接了没有?
好汉坡 2009-11-20
  • 打赏
  • 举报
回复
网络问题?

22,209

社区成员

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

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