sql语句循环插入时出错,求帮助!!

aaa_dai 2014-07-28 04:51:58
if @as_xtyhdm is not null and rtrim(@as_xtyhdm)<>''
begin
set @ln_i=charindex(',',@as_xtyhdm);
if @ln_i=0
begin
insert into xst53 ( xsczhm,
xtyhdm)values
(@as_xsczhm,
@as_xtyhdm);
end
else
begin
set @as_xtyhdm=@as_xtyhdm+',';
while @ln_i>=1
begin
set @ls_sql=substring(@as_xtyhdm,1,@ln_i-1);
insert into xst53 ( xsczhm,
xtyhdm)values
(@as_xsczhm,
@ls_sql);
set @as_xtyhdm=substring(@as_xtyhdm,@ln_i+1,len(@as_xtyhdm)-@ln_i);
set @ln_i=charindex(',',@as_xtyhdm);
end
end
end
...全文
153 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
aaa_dai 2014-07-29
  • 打赏
  • 举报
回复
已经查出来了,通过print确定调用出错
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
把参数全部替换成正常值,然后只提取出存储过程的部分执行一下看看报什么错,50000是自定义错误,不跟踪比较难发现
aaa_dai 2014-07-28
  • 打赏
  • 举报
回复
CREATE proc [dbo].[p_sa_msg_sentmsg_save]
( @as_userid varchar(255), -- 操作用户ID
@as_wldm varchar(255), -- 往来代码
@as_func varchar(255), -- 菜单或功能ID
@as_xsczhm varchar(26), --操作号码
@as_xsfbrq varchar(30), --发布日期
@as_xsfbry varchar(20), --发布人员
@as_xsfbzt varchar(255), --发布主题
@as_xsfbnr varchar(255), --发布内容
@as_xsxxbz varchar(255), --信息备注
@as_xslrry varchar(20), --录入人员
@as_xslrrq varchar(30), --录入日期
@as_xsfbtp varchar(255), --图片
@as_xxfbzt varchar(1), --发布状态
@as_xtyhdm varchar(max), --用户代码
@an_errorcode int output , -- 错误代码,如果没有错误 an_errorcode, as_errormsg 均为空
@as_errormsg varchar(1024) output -- 返回错误消息
)
as

--北京修改
--少了一个参数@as_xsfbtp
--


BEGIN
declare @ls_storename varchar(50); --存储sproc名字的变量
set @ls_storename = 'p_sa_msg_sentmsg_save';
declare @ln_count int; -- 判断数据是否存在
set @ln_count=0;
declare @ls_xsczhm varchar(50); --插入时的操作号码
set @ls_xsczhm='';
declare @lt_xsfbrq datetime; --发布时间数据格式转换
set @lt_xsfbrq='';
declare @lt_xslrrq datetime; --录入时间数据格式转换
set @lt_xslrrq='';
declare @ls_sql varchar(max); --用于单个xtyhdm的赋值
set @ls_sql='';
declare @ln_i int; --','的标志
set @ln_i=0;
--返回变量赋初值
set @an_errorcode = 0;
set @as_errormsg = '';
------------------------------------------------------------------------
--空值逻辑判断
if @as_xsfbry is null or rtrim(@as_xsfbry)=''
begin
set @an_errorcode = 10001001;
set @as_errormsg = '发布人员不能为空!';
return;
end
if @as_xsfbzt is null or rtrim(@as_xsfbzt)=''
begin
set @an_errorcode = 10001001;
set @as_errormsg = '发布状态不能为空!';
return;
end
if @as_xsfbnr is null or rtrim(@as_xsfbnr)=''
begin
set @an_errorcode = 10001001;
set @as_errormsg = '发布内容不能为空!';
return;
end
if @as_xsczhm is null or rtrim(@as_xsczhm)=''
begin
set @an_errorcode = 10001001;
set @as_errormsg = '操作号码不能为空!';
return;
end
if @as_xtyhdm is null or rtrim(@as_xtyhdm)=''
begin
set @an_errorcode = 10001001;
set @as_errormsg = '用户代码不能为空!';
return;
end
if len(@as_xsfbnr)>255
begin
set @an_errorcode = 10001001;
set @as_errormsg = '发布内容超出255个字符!';
return;
end
---------------------------------------------------------------------------------------------------
--数据格式转换
begin try
set @lt_xsfbrq=convert(datetime,@as_xsfbrq);
end try
begin catch
raiserror(@as_errormsg,16,1, @an_errorcode);
return;
end catch
begin try
set @lt_xsfbrq=convert(datetime,@as_xslrrq);
end try
begin catch
raiserror(@as_errormsg,16,1, @an_errorcode);
return;
end catch
---------------------------------------------------------------------------------------------------
--数据插入或修改
begin try
select @ln_count=count(1)
from xst52
where xsczhm=@as_xsczhm ;
if @ln_count=0
begin
exec p_get_no @adt_date = @lt_xsfbrq,
@as_vou_no=@ls_xsczhm output;
insert into xst52 (xsczhm,
xsfbrq,
xsfbry,
xsfbzt,
xsfbnr,
xsxxbz,
xslrry,
xslrrq,
xsfbtp,
xxfbzt) values(
@ls_xsczhm, --操作号码
@lt_xsfbrq, --发布日期
@as_xsfbry, --发布人员
@as_xsfbzt, --发布主题
@as_xsfbnr, --发布内容
@as_xsxxbz, --信息备注
@as_xslrry, --录入人员
@lt_xslrrq, --录入日期
@as_xsfbtp, --图片
@as_xxfbzt); --发布状态
end
else
begin
update xst52 set xsczhm=@as_xsczhm, --操作号码
xsfbrq=@as_xsfbrq, --发布日期
xsfbry=@as_xsfbry, --发布人员
xsfbzt=@as_xsfbzt, --发布主题
xsfbnr=@as_xsfbnr, --发布内容
xsxxbz=@as_xsxxbz, --信息备注
xslrry=@as_xslrry, --录入人员
xslrrq=@as_xslrrq, --录入日期
xsfbtp=@as_xsfbtp, --图片
xxfbzt=@as_xxfbzt --发布状态
where xsczhm=@as_xsczhm ;
end;
--陈列店面表插入
--删除旧有关系
set @ln_count=0;
select @ln_count=count(1)
from xst53
where xsczhm=@as_xsczhm;
if @ln_count <>0
begin
delete from xst53
where xsczhm=@as_xsczhm;
end
--xtwldm的循环插入select * from xst52
if @as_xtyhdm is not null and rtrim(@as_xtyhdm)<>''
begin
set @ln_i=charindex(',',@as_xtyhdm);
if @ln_i=0
begin
insert into xst53 ( xsczhm,
xtyhdm)values
(@as_xsczhm,
@as_xtyhdm);
end
else
begin
set @as_xtyhdm=@as_xtyhdm+',';
while @ln_i>=1
begin
set @ls_sql=substring(@as_xtyhdm,1,@ln_i-1);
insert into xst53 ( xsczhm,
xtyhdm)values
(@as_xsczhm,
@ls_sql);
set @as_xtyhdm=substring(@as_xtyhdm,@ln_i+1,len(@as_xtyhdm)-@ln_i);
set @ln_i=charindex(',',@as_xtyhdm);
end
end
end
-- 执行写操作无任何异常,错误代码错误消息清空
set @an_errorcode = 0;
set @as_errormsg = '';
end try
begin catch
raiserror(@as_errormsg,16,1, @an_errorcode);
return;
end catch
END

aaa_dai 2014-07-28
  • 打赏
  • 举报
回复
参数都进行了声明并赋初值,但一直报错:消息 50000,级别 16,状态 1,过程 p_sa_msg_sentmsg_save,第 185 行

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧