1

SQL スカラー関数で 1 つの変数を使用して 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 の関数の種類

複数の値を返す場合は、テーブル値関数を使用する必要があります。

何らかの方法で 2 つのSMALLINT値を 1 つ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 に答える