读书人

一个关于自定义函数的有关问题求高手

发布时间: 2012-01-22 22:38:43 作者: rapoo

一个关于自定义函数的问题,求高手帮助~!
****建立的合并函数****
CREATE function jobs(@comid int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str= ' '
select @str=@str+ '、 '+cast(jobs as varchar) from R_Jobs where comid=@comid and ypcs <5 set @str=right(@str,len

(@str)-1)
return(@str)
End

****调用函数****

SELECT DISTINCT comid,zhaopin.jobs(a.comid) AS jobs2 from R_jobs

****结果****
出错了,系统提示:
“向 substring 函数传递了无效的 length 参数。”
但在在函数里检查语句时没有报错!

*****修改****
我把函数里的条件 “ypcs <5”取消后就正常显示结果了,但我却希望表R_jobs中符合“ypcs <5”的条件的JOBS字段相加和。

求高手给于能实现这个条件的语句怎么修改?????????????


[解决办法]
未发现什么错误呀

create table r_jobs(comid int,ypcs int,jobs varchar(5000))
go

CREATE function jobs(@comid int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str= ' '
select @str=@str+ '、 '+cast(jobs as varchar) from R_Jobs where comid=@comid and ypcs <5
set @str=right(@str,len(@str)-1)
return(@str)
End
go
insert into r_jobs
select 1,1, 'asdf ' union
select 1,1, 'asdf1 ' union
select 1,1, 'asdf2 ' union
select 1,1, 'asdf3 ' union
select 1,1, 'asdf4 '


SELECT DISTINCT comid,dbo.jobs(comid) AS jobs2 from R_jobs


drop table r_jobs
drop function jobs

[解决办法]
一法。

create table r_jobs(comid int,ypcs int,jobs varchar(5000))
go

CREATE function jobs(@comid int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str= ' '
select @str=@str+ '、 '+cast(jobs as varchar) from R_Jobs where comid=@comid and ypcs <5
set @str=stuff(@str, 1, 1, ' ') --改用stuff
return(@str)
End
go
insert into r_jobs
select 1,1, 'asdf ' union
select 1,1, 'asdf1 ' union
select 1,1, 'asdf2 ' union
select 1,1, 'asdf3 ' union
select 1,1, 'asdf4 '


SELECT DISTINCT comid,dbo.jobs(comid) AS jobs2 from R_jobs


drop table r_jobs
drop function jobs

读书人网 >SQL Server

热点推荐