存储过程生疏,还望指教
CREATE PROCEDURE insert_single_selected_two
@word varchar(10),
@grade varchar(10),
@user_name varchar(40),
@number numeric(10,0)
AS
begin
set @user_name=@user_name+'_single_selected'
insert into @user_name
select top @number * from single_select
where 级别=@grade and 关键字=@word
and id not in (select id from @user_name) order by newid()
end
RETURN
直接报错:@number附近有错
@number就两个地方,偶想不到哪里出的错。
顺便再问问,where条件中的“级别=@grade and 关键字=@word”是不是有效的?我担心的是会不会因为没有单引号而导致出错
[解决办法]
- SQL code
CREATE PROCEDURE insert_single_selected_two@word varchar(10),@grade varchar(10),@user_name varchar(40),@number numeric(10,0)ASbegindeclare @str varchar(2000)set @str=''set @user_name=@user_name+'_single_selected'set @str='insert into '+@user_name+'select top '+ltrim(@number)+ ' * from single_select where 级别=@grade and 关键字=@word+ and id not in (select id from '+@user_name+') order by newid()end'exec(@str)RETURN存储过程中要想传入表名的时候不能直接使用,你得先把语句拼接起来,然后动态执行
[解决办法]
当表名为动态时,需要使用动态SQL.
- SQL code
CREATE PROCEDURE insert_single_selected_two@word varchar(10),@grade varchar(10),@user_name varchar(40),@number numeric(10,0)ASbeginset @user_name=@user_name+'_single_selected'declare @sql as varchar(1000)set @sql = 'insert into ' + @user_name + 'select top ' + ltrim(@number) + ' * from single_select where 级别=''' + @grade + ''' and 关键字= ''' + @word + '''and id not in (select id from ' + @user_name + ') order by newid()'exec(@sql)endRETURN