ALTER procedure [egsoftcn].[getsendlist]
(
@uname varchar(100),@codelist varchar(8000),@msg nvarchar(1000),@sendtime datetime
)
as
begin
declare @n int
--一条信息的短信数
declare @sjtx int
--成功数据个数
set @n=len(@msg)/60+sign(len(@msg)%60)
SET NOCOUNT OFF
;with c1 as(
select number,substring(@codelist,number,charindex(',',@codelist+',',number+1)-number)code from master..spt_values
where type='p' and number<=len(@codelist) and substring(@codelist,number,1)<>',' and substring(','+@codelist,number,1)=','
),c2 as(
select row_number()over(order by number)*@n rn,code from c1
)insert into sms_send select code,@msg,0,getdate(),5,(case when @sendtime>getdate() then @sendtime else null end),null,null,null,null,@uname,@n from c2 where rn<=(select 短信数量 from 联系人 where 用户名=@uname)
set @sjtx=@@rowcount
update 联系人 set 短信数量=短信数量-@sjtx*@n where 用户名=@uname
select @sjtx as sl --大于0表示成功发送的记录数,等于0表示余额不足
end这也是论坛高人帮我写的SQL语句,执行语句是这样的:exec getsendlist 'user','1357844368,1357844368,...','test',''
其中的手机号码默认是很多个,执行后把逗号分隔的手机号码分隔成单个号码并insert sms_send表里面。但实际测试中,如果手机号码太多,比如1000个,但插入后只有800多个或者200多个,数量不固定,测试每次只发100个号码就正常,请问是不是SQL语句有什么错误的地方?麻烦指正,谢谢!