回 帖 发 新 帖 刷新版面

主题:T-SQL问题

请问一下,这样写哪里有错啊,

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个回复)

沙发

错得很离谱

板凳

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 楼

就是一张普通的表
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 楼

2楼你那是oracle 吧,他好像问的是SQL SERVER 的语法规则

select top @j empid from test

top 后面不能接变量!~

5 楼

他又没说明是什么数据库????

6 楼

如果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 楼

top 后面不能直接使用参数,要把语句改成动态的,2005中可以直接使用带参数的top

8 楼

...

9 楼

T-SQL 用于SQL SERVER. Oracle 用的是 PL/SQL

10 楼

仅仅是循环地select,结果有什么意义呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册