首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

列名或所提供值的数目与表定义不匹配,该怎么解决

2012-01-31 
列名或所提供值的数目与表定义不匹配ALTER PROCEDURE [dbo].[Qf_TeacherMessage]@areaid int,@schidint n

列名或所提供值的数目与表定义不匹配
ALTER PROCEDURE [dbo].[Qf_TeacherMessage]
@areaid int,
@schid int =null,
@flag varchar(50),--号码类型
@fee varchar(4),--筛选号码
@spn varchar(50),
@msgcontent varchar(100),
@ret int output
AS
SET NOCOUNT ON;
BEGIN
  set @ret=0
declare @ReceDetail varchar(1000)
set @recedetail='select teacherid,mobile,path from jxtmsg.dbo.jxt_teacher where mobile<>'''' and '
if @areaid is not null
begin
set @recedetail=@recedetail+' left(areaid,4)='+Convert(varchar,@areaid)+''
end
else
begin
set @ret=1
return
end
if @schid is not null
begin
set @recedetail=@recedetail+' and schid='+Convert(varchar,@schid)+''
end


declare @newReceDetail varchar(4500)
create table #HT_recemember(teacherid varchar(15),teachername varchar(10), mobile varchar(15),path varchar(10))--创建存在接收人对象的临时表
set @newReceDetail='insert into #HT_recemember '+@ReceDetail


execute(@newReceDetail)--将接收人分解到HT_recemember,使用后将删除

  if not exists(select top 1 *From #HT_recemember)
return
select top 10 * from jxt_teacher
  if @fee='A'
begin
  --发送到所有老师
  select * from #HT_recemember
   
end
  else if @fee='B'
  begin
  -- 只发领导
  delete #HT_recemember where mobile not in
(select mobile from jxt_schoolleader)
  end
  else if @fee='C'
  begin 
  --只发班主任
  delete #HT_recemember where mobile not in
  (select a.mobile from #HT_recemember a,jxt_classRant b where a.teacherid=b.teacherid and b.RantType=0)
  end

  declare @tbflag varchar(2)
  select top 1 @tbflag=Flag from jxtsms.dbo.Sms_Control



  if @flag='A' --移动
begin
if @tbflag='A'
begin
insert into jxtsms.dbo.Sms_Qf_WaitSendYd1 
(mobile,spn,path,msgcontent,status,sysflag,submittime,settime,jb,msglen)
select distinct(mobile),@spn,path,replace(replace(@msgcontent,N'%teachername',teachername),N'%teacherid',teacherid),0,'sf',getdate(),getdate(),4,len(@msgcontent) 
from #HT_recemember where dbo.fc_checkmobiletype(mobile)='yd' 
if @@error<>0
begin
set @ret=1
return
end
end
else
begin
insert into jxtsms.dbo.Sms_Qf_WaitSendYd
(mobile,spn,path,msgcontent,status,sysflag,submittime,settime,jb,msglen)
select distinct(mobile),@spn,path,replace(replace(@msgcontent,N'%teachername',teachername),N'%teacherid',teacherid),0,'sf',getdate(),getdate(),4,len(@msgcontent) 
from #HT_recemember where dbo.fc_checkmobiletype(mobile)='yd' 
if @@error<>0
begin
set @ret=1
return
end
end
end
else if @flag='B' --联通
begin
if @tbflag='A'
begin
insert into jxtsms.dbo.Sms_Qf_WaitSendLt1 
(mobile,spn,path,msgcontent,status,sysflag,submittime,settime,jb,msglen)
select distinct(mobile),@spn,path,replace(replace(@msgcontent,N'%teachername',teachername),N'%teacherid',teacherid),0,'sf',getdate(),getdate(),4,len(@msgcontent) 
from #HT_recemember where dbo.fc_checkmobiletype(mobile)='lt' 
if @@error<>0
begin
set @ret=1
return
end
end
else
begin
insert into jxtsms.dbo.Sms_Qf_WaitSendLt
(mobile,spn,path,msgcontent,status,sysflag,submittime,settime,jb,msglen)
select distinct(mobile),@spn,path,replace(replace(@msgcontent,N'%teachername',teachername),N'%teacherid',teacherid),0,'sf',getdate(),getdate(),4,len(@msgcontent) 
from #HT_recemember where dbo.fc_checkmobiletype(mobile)='lt'  
if @@error<>0


begin
set @ret=1
return
end
end
end
else if @flag='C' --电信
begin
if @tbflag='A'
begin
insert into jxtsms.dbo.Sms_Qf_WaitSendXlt1 
(mobile,spn,path,msgcontent,status,sysflag,submittime,settime,jb,msglen)
select distinct(mobile),@spn,path,replace(replace(@msgcontent,N'%teachername',teachername),N'%teacherid',teacherid),0,'sf',getdate(),getdate(),4,len(@msgcontent) 
from #HT_recemember where dbo.fc_checkmobiletype(mobile)='xlt'  
if @@error<>0
begin
set @ret=1
return
end
end
else
begin
insert into jxtsms.dbo.Sms_Qf_WaitSendXlt
(mobile,spn,path,msgcontent,status,sysflag,submittime,settime,jb,msglen)
select distinct(mobile),@spn,path,replace(replace(@msgcontent,N'%teachername',teachername),N'%teacherid',teacherid),0,'sf',getdate(),getdate(),4,len(@msgcontent) 
from #HT_recemember where dbo.fc_checkmobiletype(mobile)='xlt' 
if @@error<>0
begin
set @ret=1
return
end
end
end
drop table #HT_recemember
END

执行这个存储过程的时候exec Qf_TeacherMessage 1201,5066,'A','B','6','测试消息,打扰了',1
会出现消息 213,级别 16,状态 1,第 1 行
插入错误: 列名或所提供值的数目与表定义不匹配。的问题这是怎么回事该怎么解决

[解决办法]
比如:有个表A,有字段a,b,你在插入表纪录的时候写成
insert A(a,b) values(xx,xx,xxx)
表只有2个列,你写了3个值进去,就会出现你描述的错误信息,具体是哪问题,你根据你的环境去检查一下就知道了。
[解决办法]

列名或所提供值的数目与表定义不匹配

检查下你的存储过程里面的语句


[解决办法]

SQL code
insert(字段)跟values(字段)数量不一致
[解决办法]
declare @ReceDetail varchar(1000) 
set @recedetail='select teacherid,mobile,path from jxtmsg.dbo.jxt_teacher where mobile <>'''' and '
if @areaid is not null 
begin 
set @recedetail=@recedetail+' left(areaid,4)='+Convert(varchar,@areaid)+'' 
end 
else 
begin 
set @ret=1 
return 
end 
if @schid is not null 
begin 
set @recedetail=@recedetail+' and schid='+Convert(varchar,@schid)+'' 
end 


declare @newReceDetail varchar(4500) 
create table #HT_recemember(teacherid varchar(15),teachername varchar(10), mobile varchar(15),path varchar(10))--创建存在接收人对象的临时表 set @newReceDetail='insert into #HT_recemember '+@ReceDetail 

@ReceDetail中选择出来的只有3列数据,
而你定影的表#HT_recemember中有4列,
所以不对应,所以出现错误.
SQL code
insert into #HT_recemember  select teacherid,mobile,path from jxtmsg.dbo.jxt_teacher where mobile <>.... 

热点排行