sql server中 返回 result table 函数的俩中写法

来源:转载 发布时间:2018-11-01 10:18:28 阅读量:1352

1,直接返回表结构数据


USE [CmxSystem]

GO

/****** Object:  UserDefinedFunction [dbo].[Fun_CarsTransferList]    Script Date: 2018/10/31 星期三 19:21:50 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER  function [dbo].[Fun_CarsTransferList](@EntId int ,@UserNo varchar(30),@PageNo int)

returns table

as

return

(

    with  CarsTransferInfo as(

    select c.TransferNo,b.ChineseName,c.FromUser,c.ToUser,c.CrtDate,c.ToEntId,

    (case c.Status when '0' then '未审批'when '1' then '审批通过'when '2' then '审批拒绝' end) Status 

    from CarsTransfer  c inner join  EnterpriseUsersBaseInfo  a 

    on c.EntId=a.EntId

    inner join   EnterpriseBaseInfo   b   

    on  a.EntId=b.ID 

    where c.EntId=@EntId  and a.UserNo=@UserNo 

    )

    , BaseInfo as(    

     select a.ChineseName as name ,a.ID from EnterpriseBaseInfo a where  ID in(

     select c.ToEntId from CarsTransfer c 

     where c.EntId=31  )

     )


     SELECT  TOP 20  *    FROM

        (

            SELECT

                ROW_NUMBER () OVER (ORDER BY id ASC) RowNumber ,c.TransferNo,c.ChineseName,c.FromUser,c.ToUser,c.CrtDate,c.ToEntId,

             c. Status,b.name

             from CarsTransferInfo  c inner join   BaseInfo  b 

             on  c.ToEntId= b.ID

        ) A

    WHERE

    A.RowNumber > (@PageNo - 1) * 20



)



2,返回表函数中需要使用变量做一些判断的方法在返回表数据


USE [CmxSystem]

GO

/****** Object:  UserDefinedFunction [dbo].[Fun_AccountEntry]    Script Date: 2018/10/31 星期三 19:23:45 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER FUNCTION [dbo].[Fun_AccountEntry](  @RdNo varchar(30),@EntId int)    

RETURNS  @Table TABLE(        

    RdNo varchar(20),

    EntId int ,

    Amount int,

    CrtDate datetime,

    Remark  varchar(50),

    PayDocNo varchar(30),

    AccoutType varchar(30),

    CarsVin   varchar(20),

    WhCode     varchar(20),

    ArCode     varchar(20)

)    

AS   

BEGIN   

    DECLARE  @str char 

    select @str = LEFT(@RdNo,1)

    if (@str)='R'


       INSERT @Table select top 1 a.RdNo,a.EntId,a.Amount,a.CrtDate,a.Remark,a.PayDocNo,

              (CASE b.AccoutType

                   WHEN '1' THEN '充值'

                   WHEN '2' THEN '费用'

                   WHEN '3' THEN '预约'

                   WHEN '4' THEN '退款'

              END) as AccoutType

        ,b.CarsVin,'','' 

           from  EnterpriseRechargeDetm a inner join  AccountEntry b  on a.RdNo = b.BillNo

           where  a.EntId=@EntId and  a.RdNo=@RdNo  

      

    if (@str)='O'

          INSERT @Table  select a.BillNo,a.EntId,a.Amount,a.CrtDate,'','',b.WhCode,b.ArCode,

          

            (CASE a.AccoutType

                   WHEN '1' THEN '充值'

                   WHEN '2' THEN '费用'

                   WHEN '3' THEN '预约'

                   WHEN '4' THEN '退款'

              END) as AccoutType,

          a.CarsVin 

             from AccountEntry  a inner join  OrderDetm b

             on a.BillNo=b.OrderNo

             where  a.EntId=@EntId and  a.BillNo=@RdNo 


  if  (@str)='I'

          INSERT @Table  select a.BillNo,a.EntId,a.Amount,a.CrtDate,'','',b.WhCode,b.ArCode, 

            (CASE a.AccoutType

                   WHEN '1' THEN '充值'

                   WHEN '2' THEN '费用'

                   WHEN '3' THEN '预约'

                   WHEN '4' THEN '退款'

              END) as AccoutType

              ,a.CarsVin 

             from AccountEntry  a inner join  OrderDetm b

             on a.BillNo=b.OrderNo

             where  a.EntId=@EntId and  a.BillNo=@RdNo 

    RETURN     

END

总结:应为函数中不能创建临时表所以使用该方法


RETURNS  @Table TABLE(        

    RdNo varchar(20),

    EntId int ,

    Amount int,

    CrtDate datetime,

    Remark  varchar(50),

    PayDocNo varchar(30),

    AccoutType varchar(30),

    CarsVin   varchar(20),

    WhCode     varchar(20),

    ArCode     varchar(20)

)     相当于就是创建了临时表


在使用 insert @Table  select * from table 的方法吧数据查出来赋值给新建的表中在返回

--------------------- 

作者:十年河东,十年河西,莫欺骚年穷 

来源:CSDN 

原文:https://blog.csdn.net/weixin_41600552/article/details/83589168 

版权声明:本文为博主原创文章,转载请附上博文链接!


标签: 数据库
分享:
评论:
你还没有登录,请先