有没有办法在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
答案 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。希望这会有所帮助!!!