从sql中的标量函数返回2列值

时间:2013-10-16 11:42:28

标签: sql sql-server sql-server-2008 sql-function

有没有办法在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

2 个答案:

答案 0 :(得分:5)

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

  

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

来源:Types of Functions on TechNet

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

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

答案 1 :(得分: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。希望这会有所帮助!!!