Ошибка табличной переменной SQL Server 2008: необходимо объявить скалярную переменную "@RESULT" - PullRequest
2 голосов
/ 23 марта 2010

Я впервые использую табличные значения в качестве параметра для функции в SQL Server 2008. Приведенный ниже код вызывает эту ошибку:

Необходимо объявить скалярную переменную "@RESULT".

Почему ?!Я объявляю это в первой строке функции!

        ALTER FUNCTION f_Get_Total_Amount_Due(

      @CUSTOMER_LIST   [tpCSFM_CUSTOMER_SET_FOR_MONEY] READONLY

    )
    RETURNS [tpCSFM_CUSTOMER_SET_FOR_MONEY]
    AS
    BEGIN


 --Prepare the return value, start with initial customer list
 DECLARE @RESULT AS [tpCSFM_CUSTOMER_SET_FOR_MONEY]
 INSERT INTO @RESULT SELECT * FROM @CUSTOMER_LIST

 --Todo: populate with real values
 UPDATE @RESULT SET tpCSAM_MONEY_VALUE = 100

 --return total amounts as currency
 RETURN @RESULT

 END

Ответы [ 3 ]

3 голосов
/ 23 марта 2010

Ваша декларация попадет в случай 'Многозначной табличной функции':

Multistatement Table-valued Functions
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [READONLY] } 
    [ ,...n ]
  ]
)
RETURNS @return_variable TABLE <table_type_definition>
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    BEGIN 
                function_body 
        RETURN
    END
[ ; ]

К сожалению, @return_variable не может быть объявлена ​​как тип таблицы, вам придется скопировать объявление типа TVP в тип таблицы возврата функции.

2 голосов
/ 23 марта 2010

Этот компилируется нормально:

--Returns the name of the field to use to find results
ALTER FUNCTION f_Get_Total_Amount_Due(
    @CUSTOMER_LIST          [tpCSFM_CUSTOMER_SET_FOR_MONEY] READONLY
)
RETURNS @RESULT TABLE(
    tpCSFM_CUS_ID   uniqueidentifier PRIMARY KEY,
    tpCSFM_MONEY_VALUE  MONEY NULL
)
AS
BEGIN
--Prepare the return value, start with initial customer list
INSERT INTO @RESULT SELECT * FROM @CUSTOMER_LIST

--Todo: populate with real values
UPDATE @RESULT SET tpCSFM_MONEY_VALUE = 100

--return total amounts as currency
RETURN
END
0 голосов
/ 23 марта 2010

Я не верю, что табличные функции получили какие-либо новые функции , чтобы возвращаемое значение могло быть определяемым пользователем типом таблицы.

Тем не менее, вы можете попробовать: RETURNS @RESULT [tpCSFM_CUSTOMER_SET_FOR_MONEY] и удалить ваш отдельный DECLARE.

Мне нужно проверить это, когда у меня будет возможность настроить тестовый набор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...