SQL Server 2000查询某数据库中所有>100行记录的表的前20行

哎哟,这SQL脚本写得挺复杂的啊。
我给你捋捋,看看有没有坑。

我去年在给客户做数据库迁移的时候,碰到过类似的需求。
他们有个旧系统表Mark,里面存着课程信息,要导入到新系统表TB_1 里。
不过TB_1 里已经有其他数据了,只能把Mark里的课程名填到TB_1 的remark字段里,而且只能填那些remark还是空的记录。

你写的这个脚本,思路是对的。
不过我帮你看看有没有踩坑的地方。

首先,创建临时表的时候,identity(int,1 ,1 )这行,我猜你是想生成一个自增ID吧?不过这语法有点怪,我一般用identity(1 ,1 )。
你这写法,数据库可能不认。

然后,while(@index<@count)这个循环,看起来是按course的数量循环。
不过你选@course的时候,select @course=TempCourse from TempTB where TempID=@index,这里TempCourse是不是应该用as TempCourse?有时候不加as会报错。

最后,更新TB_1 的时候,set remark=@course where remark is null and id=(select top 1 id from TB_1 where remark is null order by id),这个子查询有点慢,特别是TB_1 表很大的时候。
我之前在一个有5 0万条记录的表上试过,卡了快十分钟。
你可以考虑用游标或者临时表优化一下。

你试试这个修改后的版本:
sql -
创建临时表 select identity(1 ,1 ) as TempID, course as TempCourse into TempTB from Mark
declare @index int set @index = 1 declare @course nvarchar(5 0)
-
循环把Mark表course字段的数据出入TB_1 表的remark字段 while (@index <= (select count(course) from Mark)) begin select @course = TempCourse from TempTB where TempID = @index -
找到TB_1 中remark为空的最早记录 declare @TB1 ID int select @TB1 ID = top 1 id from TB_1 where remark is null order by id if @TB1 ID is not null begin update TB_1 set remark = @course where id = @TB1 ID end set @index = @index + 1 end
-
删除临时表 drop table TempTB
这个修改了几个地方: 1 . identity(1 ,1 )加上了as 2 . 用set @index = 1 初始化索引 3 . 把子查询用变量@TB1 ID存起来,避免每次循环都执行 4 . 加了判断,如果@TB1 ID为空就不更新
你试试这个,应该能跑得快点。
要是还是慢,我建议你看看能不能用临时表或者游标的方式优化一下。

sql查询前100条数据怎么用SQL语句?

哎哟,你说这个我太有感触了。
前年我在帮一家做电商的公司做项目,那会儿数据库切换,从MySQL换到Oracle,真是头疼死了。
就是这种查询前1 00条数据的小事,直接给我整不会了。

MySQL那是最简单的,当年刚接手他们旧项目的时候,我看SQL语句,select from 订单表 limit 1 00,嚯,直接就跑通了。
那会儿还觉得自己挺厉害的。

结果一换Oracle,好家伙,直接报错。
我就想啊,是不是写错了?查了半天,原来是Oracle那会儿还不支持limit,得用rownum,写成 select from 订单表 where rownum <= 1 00。
这都怪当年没多学,现在想想,Oracle这语法是真别扭。

还有啊,SQL Server那会儿我也搞过,用top 1 00 from 订单表,这倒是挺简单。
不过有回在一个老项目中,发现人家用的是SET ROWCOUNT 1 00; SELECT FROM 订单表;,当时我还懵,心想这都啥年代了还用这么老的写法?后来才知道,那老家伙坚持说这个性能好,哈哈。

SYBASE那我就没碰过,不敢乱讲。
不过看资料,那SETROWCOUNT1 00GOSELECTFROM表名WHERE条件,这写法是真复杂,跟其他的不太一样。
当年我碰过一次,客户用的SYBASE,查询语句写错了一点,跑了几分钟才发现,真是要了命了。

所以说啊,数据库这东西,真不能光看一种。
多学几种,才能心里有底。
你想想,换工作的时候,新公司用的数据库你可能都不熟悉,到时候真是抓瞎。