问题描述
我只是想返回从选择产生的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