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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41600552/article/details/83589168

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 的方法吧数据查出来赋值给新建的表中在返回

猜你喜欢

转载自blog.csdn.net/weixin_41600552/article/details/83589168