主题:T-SQL问题
ganymebe
[专家分:710] 发布于 2007-01-21 08:50:00
请问一下,这样写哪里有错啊,
declare @i int,@j int
set @i=0
while(@i*10<100000)
begin
set @j=@i*10
select top 10 * from test where empid not in(select top @j empid from test)
set @i=@i+1
end
回复列表 (共10个回复)
板凳
ilovemountainking [专家分:3730] 发布于 2007-01-21 16:46:00
declare
@i int:=0;
@j int;
begin
while (@i*10<100000) loop
@j:=@i*10;
select top 10 * from test where empid not in(select top @j empid from test);
@i:=@i+1;
end;
不知道你表头的结构,最好把表的结构贴上来。
3 楼
ganymebe [专家分:710] 发布于 2007-01-21 16:57:00
就是一张普通的表
create table test
(
Empid int not null,
EmpName varchar(20)
)
declare @num int
set @num=0
while(@num<100000)
begin
insert into test values(@num,'kai###')
set @num=@num+1
end
4 楼
233238447 [专家分:1350] 发布于 2007-01-21 18:04:00
2楼你那是oracle 吧,他好像问的是SQL SERVER 的语法规则
select top @j empid from test
top 后面不能接变量!~
6 楼
jinlonggao [专家分:17130] 发布于 2007-03-03 17:12:00
如果top后面支持变量的话,楼主的程序应该没什么错,否则,按如下:
declare @i int,@j int
set @i=0
while(@i*10<100000)
begin
set @j=@i*10
set sqlstr = 'select top 10 * from test where empid not in(select top '
+ convert(char(6),@j) +' empid from test)'
exec(sqlstr)
set @i=@i+1
end
7 楼
棉花糖ONE [专家分:90] 发布于 2007-03-04 00:49:00
top 后面不能直接使用参数,要把语句改成动态的,2005中可以直接使用带参数的top
8 楼
lmzxh327 [专家分:30] 发布于 2007-03-17 11:42:00
...
9 楼
Leo64823900 [专家分:960] 发布于 2007-03-17 19:19:00
T-SQL 用于SQL SERVER. Oracle 用的是 PL/SQL
10 楼
菜鸭 [专家分:5120] 发布于 2007-03-19 09:14:00
仅仅是循环地select,结果有什么意义呢?
我来回复