导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

自定义函数出错,请兄弟们帮我看看

fyming 中南财经政法大学 侦察学  2006-01-18 04:34:23
CREATE FUNCTION cus_f_IsUsed
(
@lngID int=0,
@v int=0
)

RETURNS bit

AS

BEGIN

declare
@sql nvarchar(1000),
@IsUsed bit,
@Fields1 nvarchar(30),
@ID int

--字段名1变量(ID)
set @Fields1=case when @v=1800 then N'lngProvinceID'--省份
when @v=2000 then N'lngCityID'--城市
when @v=2200 then N'lngSepcialtyID'--专业
when @v=2400 then N'lngNationID'--民族
when @v=2600 then N'lngDiplomaID'--学历
when @v=2800 then N'lngWorkTypeID'--工种
when @v=3000 then N'lngProcessID'--工序
when @v=3200 then N'lngWorkPositionID'--工位
when @v=3400 then N'lngEmployeeTypeID'--员工类别
when @v=3600 then N'lngEmployeeQualityID'--员工性质
when @v=3800 then N'lngDutyID'--职务
when @v=4000 then N'lngTitleID'--职称
when @v=4200 then N'lngCusTypeID'--客户类别
when @v=4400 then N'lngCusGrpID'--客户组别
when @v=4600 then N'lngCusPropertyID'--企业性质
when @v=4800 then N'lngCusTradeID'--行业
end

set @IsUsed=0

--employee
if @v<>5000
begin
set @sql=N'select @F='+@Fields1+N' from employee where ' +@Fields1+N'=@ID'
exec sp_executesql @sql,
N'@F int out,@ID int',@ID out,@lngID
if @ID is not null
begin
set @IsUsed=1
goto aa
end
end

aa:
return @IsUsed
____________________________________________________________________

在查询分析器里执行
'select dbo.cus_f_IsUsed (3,1800)',
提示'服务器: 消息 557,级别 16,状态 2,过程 cus_f_IsUsed,行 44
只有函数和扩展存储过程才能从函数内部执行。'

什么意思?
...全文
41 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zlp321002 2006-01-18
函数不能用动态SQL,改存储过程方式!!
回复
fyming 2006-01-18
我测试过,只是在执行到
exec sp_executesql @sql,
N'@F int out,@ID int',@ID out,@lngID
这一句时才出错,那么错误提示中的"只有函数和扩展存储过程才能从函数内部执行"是什么意思?
回复
尚和空四 2006-01-18


给你个例子看看吧。





CREATE FUNCTION dbo.func_getdate
(@date datetime)
RETURNS varchar(10)
AS
BEGIN
declare @y varchar(4)
declare @m varchar(2)
declare @d varchar(2)
declare @dt varchar(10)

set @y = convert(varchar(4),year(@date))
set @m = convert(varchar(2),month(@date))
set @d = convert(varchar(2),day(@date))
set @dt = @m + '/' + @d + '/' + @y
if @dt = '1/1/1900'
set @dt = ''
if @dt = '01/01/1900'
set @dt = ''
if @dt = '12/31/9999'
set @dt = ''
return @dt
END








回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告