Search code examples
sql-serverfunctioncounttable-valued-parameters

SQL counting total rows from temporary table in a table valued function


I need the number of total rows inserted in @t, if @total equals 1.

How can I do that?

ALTER FUNCTION [dbo].[myfunction]
(   
    @ID int = NULL,
    @years int = NULL,
   ,@total BIT = 0 
)
RETURNS @t TABLE (
    RowNum int,
    ID int,
    years int,
) 
AS
BEGIN
    INSERT INTO @t
       SELECT  
          ROW_NUMBER() OVER(ORDER BY years) AS RowNum,
          ID,
          years,
       FROM dbo.mytable
       WHERE ..     

    RETURN 
END

The look of the results should be:

Total   RowNum   ID   year
-------------------------------------
  3       1      101  2014
  3       2      102  2015
  3       3      103  2016 

Thanks!


Solution

  • RETURNS @t TABLE (
        Total int,
        RowNum int,
        ID int,
        years int,
    ) 
    
    ...
    
    INSERT INTO @t
           SELECT  
              NULL,
              ROW_NUMBER() OVER(ORDER BY years) AS RowNum,
              ID,
              years,
           FROM dbo.mytable
           WHERE ..
    
    ...
    IF(@total=1) BEGIN
        DECLARE @Count INT
        SELECT @Count=COUNT(*) FROM @t
        UPDATE @t SET Total=@Count
    END
    RETURN