1

有没有一种方法可以在 SQL Scalar 函数中用一个变量返回 2 个值

ALTER FUNCTION [report].[fGetKPI] (@metricName AS VARCHAR(50))
RETURNS SMALLINT
AS
BEGIN
    DECLARE 
        @kipId AS SMALLINT,
        @metricId as SMALLINT;

    SELECT TOP 1 @kipId = [KPI_Id], @metricId = [MetricId] FROM report.[KPIDetails] WHERE [MetricName] = @metricName;

    IF (@kipId IS NULL OR @metricId IS NULL)
        DECLARE @Error AS INT = dbo.fThrowError('No key found for the component "' + @metricName + '"');
    RETURN (select @kipId,@metricId);
END
4

2 回答 2

5

根据定义,标量函数返回单个值:

用户定义的标量函数返回 RETURNS 子句中定义的类型的单个数据值。

来源:TechNet 上的函数类型

如果要返回多个值,则应使用表值函数。

您也可以尝试以某种方式将您的两个SMALLINT值打包成一个INT或将它们转换为带有一些分隔符的字符串,但这可能会变得复杂并且(在大多数情况下)并不是必需的。

于 2013-10-16T11:54:53.000 回答
0

您可以将函数重写为:

IF OBJECT_ID('[report].[fGetKPI]') IS NOT NULL
DROP FUNCTION [report].[fGetKPI];
GO
CREATE FUNCTION [report].[fGetKPI] (@metricName AS VARCHAR(50))
RETURNS TABLE
AS
RETURN 
SELECT TOP 1 [KPI_Id], [MetricId] FROM report.[KPIDetails] WHERE [MetricName] = @metricName;
Go

然后通过从函数中选择数据进一步使用 dbo.fThrowError。希望这可以帮助!!!

于 2013-10-16T12:03:28.943 回答