SQL 自定義函式例項

2021-07-10 15:30:00 字數 2241 閱讀 5484

---------------------------------sql server多行資料拼接 ---------------------------------------

create table aaa(id int,typ varchar(20),code varchar(10))

insert into aaa values(1,'鉛筆','0001')

insert into aaa values(2,'鉛筆','0002')

insert into aaa values(3,'鉛筆','0003')

insert into aaa values(4,'鋼筆','0004')

insert into aaa values(5,'鋼筆','0005')

insert into aaa values(6,'鋼筆','0004')

insert into aaa values(7,'原子筆','0007')

insert into aaa values(8,'原子筆','0008')

insert into aaa values(9,'原子筆','0007')

----drop table aaa

-- select * from aaa

select code from aaa  where typ='鉛筆'

select code from aaa  where typ='鋼筆' group by code

--需求結果:

--型別 

彙總--鋼筆 0004,0005

--鉛筆 0001,0002,0003

--原子筆  0007,0008

---1.使用了游標的自定義函式

drop function getcode

create function getcode(@typ varchar(20))

returns varchar(30)

asbegin

declare @code varchar(10)

declare @temp varchar(30)

declare @num int

declare mycur cursor for (select code from aaa where typ=@typ group by code)

open mycur

fetch next from mycur into @code

set @num=0

while @@fetch_status=0

begin

if @num=0

begin 

set @temp=@code

endelse

begin

select @temp=@temp+'、'+@code

endset @num=@num+1 

fetch next from mycur into @code

endclose mycur

deallocate mycur

return @temp

endselect aaa.typ as 型別,dbo.getcode(aaa.typ)as 彙總

from aaa group by aaa.typ

---2.用自定義函式做的

create function getcode(@typ varchar(20))

returns nvarchar(200)

asbegin

declare @str1 varchar(50)

set @str1=''

select @str1=@str1+'、'+code from aaa where typ=@typ group by code

select @str1=right(@str1,len(@str1)-1)

--或select @str1=@str1+code+'、' from aaa where typ=@typ group by code

--select @str1=left(@str1,len(@str1)-1)

return @str1

end-- drop function getcode

select typ,dbo.getcode(typ) from aaa group by typ

-- select * from aaa

結果:typ (無列名)

鋼筆 0004、0005

鉛筆 0001、0002、0003

原子筆 0007、0008

SQL自定義函式

建立使用者自定義函式 標量函式 create function dbo.bmrs bmh as int returns int asbegin declare bmrs int select bmrs count 工號 from 銷售人員where 部門號 bmh return bmrs endgo...

sql 自定義函式

delimiter create definer function woshow try aid bigint returns bigint 20 language sql not deterministic sql security comment string begin if aid 0 th...

SQL自定義函式

自定義函式與儲存過程的區別 存在的意義 1.能夠在select等sql語句中直接使用自定義函式,儲存過程不行。2.自定義函式可以呼叫其他函式,也可以呼叫自己 遞迴 3.可以在表列和check 約束中使用自定義函式來實現特殊列或約束 4.自定義函式不能有任何 函式 是指對具有函式外作用域 例如資料庫表...