处理错误"在函数内不正确地使用了 'INSERT'。"

FlyFish1285 2007-06-11 10:56:58
各位大侠们好!
今天在调试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
然后在调试执行的过程中,给出这样的错误:
服务器: 消息 443,级别 16,状态 2,过程 InsertEvection,行 26
在函数内不正确地使用了 'INSERT'。
我然后在网上查了一下,有人建议使用存储过程,使用存储过程当然可以解决此问题,但我想弄明白的是这样为什么不行???
希望各位大侠不吝赐教!
...全文
567 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
FlyFish1285 2007-06-11
  • 打赏
  • 举报
回复
在SQL中,执行INSERT语句后显示:(所影响的行数为 1 行)
那是不是意味着执行后的返回值是int 型的?/
如果是的话,那么不就可以了??
FlyFish1285 2007-06-11
  • 打赏
  • 举报
回复
谢了!
正在学习中
呵呵呵....
zjcxc 2007-06-11
  • 打赏
  • 举报
回复
函数内不支持使用INSERT语句

函数不支持的语句很多, 楼主应该看看sql联机帮助上关于函数限制方面的说明

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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