使用T-SQL函数,如何从count*函数返回整数?

问题描述

我只是想返回从选择产生的count(*)整数值。这是我第一次尝试功能

我已经尝试过该函数的内部语句,并且所有工作都符合我的预期。这将返回表,但是我真正想要的只是返回count(*)返回的整数。我该怎么办?

CREATE FUNCTION dbo.LogicMatchCount
    (@logic varchar(1000),
     @tags varchar(1000)
)

RETURNS TABLE

AS 
    RETURN
 
        WITH
 LogicTagTable AS 
        (

            SELECT TRIM(VALUE) AS logic_tag

            FROM string_split(@logic,'&')

        ),
        DonorTagTable AS 
        (

          SELECT TRIM(VALUE) donor_tag

          FROM string_split(@tags,',')

        )
    
        
        SELECT COUNT(*) AS TagMatchCount

        FROM LogicTagTable ltt

        INNER JOIN DonorTagTable dtt ON dtt.donor_tag = ltt.logic_tag;

谢谢!

解决方法

由于您实际上只想返回一个单个原子值,请改用标量值函数:

CREATE FUNCTION dbo.LogicMatchCount
    (@logic varchar(1000),@tags varchar(1000))
RETURNS INT
AS 
BEGIN
    DECLARE @CountResult INT;
    
    WITH LogicTagTable AS 
    (
        SELECT TRIM(VALUE) AS logic_tag
        FROM string_split(@logic,'&')
    ),DonorTagTable AS 
    (
        SELECT TRIM(VALUE) donor_tag
        FROM string_split(@tags,',')
    )
    SELECT @CountResult = COUNT(*) 
    FROM LogicTagTable ltt
    INNER JOIN DonorTagTable dtt ON dtt.donor_tag = ltt.logic_tag;
    
    RETURN @CountResult;
END;

然后这样称呼它:

SELECT dbo.LogicMatchCount('....','....');
,

也许略有不同的方法

CREATE FUNCTION dbo.svfLogicMatchCount
    (@logic varchar(1000),@tags varchar(1000)   )
Returns int as  
Begin 
   Return ( 
            SELECT COUNT(*) 
            FROM ( SELECT TRIM(VALUE) AS logic_tag
                     FROM string_split(@logic,'&')
                 ) ltt
            INNER JOIN (
                          SELECT TRIM(VALUE) donor_tag
                          FROM string_split(@tags,')
                       ) dtt ON dtt.donor_tag = ltt.logic_tag
          )
End