我现在想做一个函数,比如:我想求n个数的和,n是一个不固定的数,这个函数就得写成sum(n1,n2,n3,…………)
怎么写这个函数
怎么写这个函数
解决方案 »
- 再问 关于 cross join涉及到distinct怎么办
- 如何查找所有有主外键关系的数据?
- 如何快速定位转换错误。
- 请教一句更新语句,提示Current transaction is canceled 请大家帮忙啊!
- 求 一存储进程的写法
- 假设DataTb表中数据是固定的,查询出NumName字段中相同数据的个数,完成后如下:
- 关于触发器
- 用事件探测器来探测后台程序
- 有谁了解DB2吗?
- 运行错误:事务(进程 ID 202)与另一个进程已被死锁在 lock 资源上,原因是?
- 愁死我了,(一个函数n参数)
- sql server中怎么复制一个数据库中所有的表的结构和视图和存储过程和函数到另外一个数据库,就数据不复制
create pr_test
@pa1 int,
@pa2 int=0,
@pa3 int=0
as
...
go你可以如下调用
exec pr_test 1,2,3
exec pr_test 1,2
exec pr_test 1函数同样有可选参数
create function fn_test (
@pa1 int,
@pa2 int=0,
@pa3 int=0
)
returns int
as
...go但是不能如下调用
select dbo.fn_test(1,2)
select dbo.fn_test(1)
只能:
select dbo.fn_test(1,2,3)
select dbo.fn_test(1,2,default)
select dbo.fn_test(1,default,default)
写default感觉好难受
CREATE function dbo.pqs_split(@SourceStr varchar(8000),@SeprateStr varchar(10))
returns @table table(col varchar(100))
as
begin declare @table_tmp table(ident int identity(1,1),tempvalue char(1))
insert into @table_tmp(tempvalue) select top 1000 '' from syscolumns a,syscolumns b
if @SeprateStr=' '
begin
select @SourceStr=Replace(@SourceStr,@SeprateStr,'|' ),@SeprateStr='|'
end
insert into @table
select substring(@SourceStr,pqs.ident,charindex(@SeprateStr,@SourceStr+@SeprateStr,pqs.ident)-pqs.ident) --into #t
from @table_tmp pqs
where substring(@SeprateStr+@SourceStr,pqs.ident,1)=@SeprateStr return
end
-------------------------------
select sum(cast(col as int)) from pqs_split('1,2,3,4,45,645,7567',',') 即可
-------------------------------
结果:
-----------
8267(所影响的行数为 1 行)
只有把所有参数当做一个字符串传递过来来处理
在函数里 while 边截边加~~
传一个字符串进来
set @i=1
while @i<=len(@str)
begin
set @tempStr=substring(@i,1)
set @sum=@sum+cast(@tempStr as int)
set @i=@i+1
end
方法:
1.拼接字符串,每个参数中间用一个比较特殊的字符拼接,比如“,”
这样你在function里面用字符串方法找到","的位置,然后一一取出来。这样的方法,你就只要传一个参数就可以了.2. 如果参数类型各不同,那么就在传进来之前,做convert.toString(...)然后拼接进来
declare @s1 varchar(100)
declare @i smallint
declare @len smallint
declare @sum smallint
set @sum=0
set @s1=''
set @s='12,32,52,72,19,'
set @len=len(@s)
set @i=0
while @i<=@len
begin
if(substring(@s,@i,1)=',')
begin
set @sum=@sum+cast(@s1 as int)
set @s1=''
end
else
begin
set @s1=@s1+substring(@s,@i,1)
end
set @i=@i+1
end
print cast(@sum as int)-------
187你把這段語句放入函數中,其中,@s為輸入參數