日期:2014-05-18  浏览次数:20562 次

处理错误"在函数内不正确地使用了 'INSERT'。"
各位大侠们好!
        今天在调试SQL时写了一个函数用于向数据库中插入一条记录:
use   职工考勤数据库
--创建函数向数据库中插入出差记录
if   exists(select   *   from   sysobjects   where   name   =   'InsertEvection '   and   type   =   'fn ')
drop   function   InsertEvection
go
--在此函数中假定插入记录的开始日期是要小于结束日期的
create   function   InsertEvection   (
@worNo   char(5),   --参数1:要插入的出差记录的员工编号
@beginTime   datetime,   --参数2:出差开始日期
@endTime   datetime,--参数3:出差的结束日期
@place   char(30)   )   --参数4:出差地点
returns   int   --返回值:返回0,插入失败;返回1则插入成功
as
begin
      declare   @successor   int   --定义变量,以其作为返回值
      --判断插入记录的开始时间和结束时间的合法性
      --插入记录的开始时间大于结束时间,则置返回值为0
      if   @beginTime   > @endTime
            set   @successor   =   0
      else
      --否则进行数据插入的判断
      begin
            --查找并判断出差开始时间
            --1、某一员工的出差记录的结束时间小于其所有出差记录的开始时间,则插入数据
            if   not   exists(select   *   from   出差登记表  
                                          where   @endTime   <   出差开始日期   and   员工编号   =   @worNo)
            begin
                  set   @successor   =   1   --设置返回值
                  --插入出差记录
                  insert   into   出差登记表(员工编号,出差开始日期,出差结束日期,出差地点)
                  values(@worNo,@beginTime,@endTime,@place)
            end
            --2、某一员工的出差记录的开始时间大于其所有出差记录的结束时间,则插入数据
              else   if   not   exists(select   *   from   出差登记表  
                                          where   @beginTime   >   出差结束日期   and   员工编号   =   @worNo)
            begin
                  set   @successor   =   1   --设置返回值
                  --插入出差记录
                  insert   into   出差登记表(员工编号,出差开始日期,出差结束日期,出差地点)
                  values(@worNo,@beginTime,@endTime,@place)
            end
            --3、要插入的出差记录可能与当前的时间发生冲突,则插入失败
            else
                  set   @successor   =   0
      end
      return   @successor
end
然后在调试执行的过程中,给出这样的错误:
服务器:   消息