为什么这条语句在SQL2005中会运行不了呢?急求解答

yangyangxie 2008-10-08 12:45:28
INSERT into table1(a1,a2,a3,a4)
SELECT a1,a2,a3,a4
FROM table2
WHERE not exists
(select 1 from table1 where a1=table2.a1 and a2=table2.a2)
GO
以上是我写的一条语句,在2000中是可以运行的,换到2005就不行了,不知道什么原因?
查询也是可以的,就是不能插入到表里,但如果只是插入a1,a2这两个字段还是可以运行的.

请问各位还有别的方法解决吗?或是别的写法吗?因为我需要插入的不止这两列,
但是条件只需要那两列加起来不同就可以了,我也试过在两字段之间加空格的方法也不行.
...全文
142 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
smallfish0302 2009-04-15
  • 打赏
  • 举报
回复
是因为数据量太大的原因啊,并不是语句有什么原因。
yangyangxie 2009-04-15
  • 打赏
  • 举报
回复
ding
yangyangxie 2009-04-15
  • 打赏
  • 举报
回复
有没有解决的办法啊?
yangyangxie 2008-10-20
  • 打赏
  • 举报
回复
有没有人知道原因啊???
yangyangxie 2008-10-20
  • 打赏
  • 举报
回复
终于成功了一次了,但是为什么结果会慢这么多呢?
我刚刚运行用了28分钟才插入了,以前还从来没插入成功过,
真是怪,我反反复复删了好几次索引又重建了,聚集和非聚集试了几次,
这是第一次成功插入的,不知道什么原因???
yangyangxie 2008-10-20
  • 打赏
  • 举报
回复
问题重复一下

INSERT into table1(a1,a2,a3,a4)
SELECT a1,a2,a3,a4
FROM table2
WHERE not exists
(select 1 from table1 where a1=table2.a1 and a2=table2.a2)
GO
table1是个百万条数据的表,而且建了a1,a2的索引;table2是个视图,数据在1千条左右.
以上是我写的一条语句,在2000中是可以运行的,只需要半分钟就可以运行完毕,
换到2005查询是可以的,大概是10分钟左右,但是插入就不会成功,时间无限长,运行不完.
请问问题出在哪里呢??
yangyangxie 2008-10-09
  • 打赏
  • 举报
回复
在SQL2005查询8分钟就可以出结果的,
---其实在SQL2000里只要半分钟不到就可以完成的
pt1314917 2008-10-08
  • 打赏
  • 举报
回复
同上问,应该不会不行的。看看是什么错误`
fcuandy 2008-10-08
  • 打赏
  • 举报
回复
可能跟字段的大小写有关。

sql2005的库排序规则下,跟sql2000不一样,对象在一些排序规则下是区分大小写的。
fcuandy 2008-10-08
  • 打赏
  • 举报
回复
报什么错
CN_SQL 2008-10-08
  • 打赏
  • 举报
回复
怎么不行了,抱什么错误,贴出来.
pt1314917 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yangyangxie 的回复:]
背着灵魂漫步

在SQL2000里只要几秒就可以出来了
[/Quote]

你现在不是在2005上插入不了吗?那你就在2005上查询看耗费多少时间噢`
可能你的2000和2005这两个环境上的索引不一样。。
yangyangxie 2008-10-08
  • 打赏
  • 举报
回复
背着灵魂漫步

在SQL2000里只要几秒就可以出来了
Garnett_KG 2008-10-08
  • 打赏
  • 举报
回复
重建Table1上的聚集索引。
pt1314917 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yangyangxie 的回复:]
重新贴一次

INSERT into aaa.dbo.table1(a1,a2,a3,a4)
SELECT a1,a2,a3,a4
FROM bbb.dbo.table2
WHERE not exists
(select 1 from aaa.dbo.table1 where a1=table2.a1 and a2=table2.a2)
GO

不明白怎么回事?
[/Quote]

应该是因为你的数据量太大,所以插入很长时间都没反应。
你运行这个语句,看看耗费多长时间

SELECT a1,a2,a3,a4
FROM bbb.dbo.table2
WHERE not exists
(select 1 from aaa.dbo.table1 where a1=table2.a1 and a2=table2.a2)

yangyangxie 2008-10-08
  • 打赏
  • 举报
回复
重新贴一次

INSERT into aaa.dbo.table1(a1,a2,a3,a4)
SELECT a1,a2,a3,a4
FROM bbb.dbo.table2
WHERE not exists
(select 1 from aaa.dbo.table1 where a1=table2.a1 and a2=table2.a2)
GO

不明白怎么回事?
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yangyangxie 的回复:]
sys.table2什么意思啊?


建了索引了....
[/Quote]

你在2005的帮助里面看一下,他的select语句的书写格式
yangyangxie 2008-10-08
  • 打赏
  • 举报
回复
sys.table2什么意思啊?


建了索引了....
rucypli 2008-10-08
  • 打赏
  • 举报
回复
table1的a1 ,a2加索引了吗
  • 打赏
  • 举报
回复
把这个table2 东西改改,2005里面加入了架构之类的东西,例如 sys.table2之类的。估计是这个问题吧
加载更多回复(4)

6,129

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 新技术前沿
社区管理员
  • 新技术前沿社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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