sql中的高级编程(函数,存储过程,视图)

一、函数:用sql写一个函数,调用这个函数,返回一张数据表table

CREATE FUNCTION FunName (  
 
)  
RETURNS @TempTable table    
(  
roleid int ,rolename nvarchar(100)
)  
  
AS  
BEGIN  
declare @roleid int 
declare @rolename  nvarchar(100)

select @roleid=RoleId  , @rolename =RoleName from CICRole 

insert into @TempTable  values(
@roleid , @rolename
)


RETURN 

END

注解:

1.CICRole 为一个数据库中现有的数据表;


2.这个函数执行过程就是先声明三个变量 :TempTable(数据类型为table),roleid(数据类型为int),rolename(数据类型为nvarchar(100));查询CICRole这个表中的RoleId和RoleName字段的值,并将查询到的值赋值给变量rileid和rolename;然后将该值        
  insert到TempTable这个变量中(实际就是向这个表中添加数据);最后返回这个变量TempTable(即返回了一张数据表table)。


3.对于TempTable这个变量,它在RETURNS @TempTable table (...)的时候声明,在insert into @TempTable  values(...)时候赋值。

最后:

 记录一个比较有意思但是用处不大的函数:输入一个中文字符串,返回该串的首字母拼音大写,比如输入“五月天”,返回“WYT”。这个函数但就功能来说,蛮腻害,但是据我们的DBA说,对性能影响有点大。

USE [Leading]
GO

/****** Object:  UserDefinedFunction [dbo].[f_GetPy]    Script Date: 04/12/2017 18:32:34 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE   function   [dbo].[f_GetPy](@str   nvarchar(4000)) 
returns   nvarchar(4000) 
as 
begin 
declare   @strlen   int,@re   nvarchar(4000) 
declare   @t   table(chr   nchar(1)   collate   Chinese_PRC_CI_AS,letter   nchar(1)) 
insert   into   @t(chr,letter) 
    select   '吖 ', 'A '   union   all   select   '八 ', 'B '   union   all 
    select   '嚓 ', 'C '   union   all   select   '咑 ', 'D '   union   all 
    select   '妸 ', 'E '   union   all   select   '发 ', 'F '   union   all 
    select   '旮 ', 'G '   union   all   select   '铪 ', 'H '   union   all 
    select   '丌 ', 'J '   union   all   select   '咔 ', 'K '   union   all 
    select   '垃 ', 'L '   union   all   select   '嘸 ', 'M '   union   all 
    select   '拏 ', 'N '   union   all   select   '噢 ', 'O '   union   all 
    select   '妑 ', 'P '   union   all   select   '七 ', 'Q '   union   all 
    select   '呥 ', 'R '   union   all   select   '仨 ', 'S '   union   all 
    select   '他 ', 'T '   union   all   select   '屲 ', 'W '   union   all 
    select   '夕 ', 'X '   union   all   select   '丫 ', 'Y '   union   all 
    select   '帀 ', 'Z ' 
    select   @strlen=len(@str),@re= ' ' 
    while   @strlen> 0 
    begin 
        select   top   1   @re=letter+@re,@strlen=@strlen-1 
        from   @t   a   where   chr <=substring(@str,@strlen,1) 
        order   by   chr   desc 
        if   @@rowcount=0 
            select   @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1 
    end 
return(@re) 
end

GO
posted @ 2017-04-12 18:19  Naylor  阅读(1110)  评论(3编辑  收藏  举报