Функции возвращает пустой набор
Я успешно создал функцию в SQL 2008:
ALTER FUNCTION [dbo].Func_raw_data_xref (@ColName AS NVARCHAR(255))
RETURNS @VVSrcCDs TABLE (
VV_SRC_CD NVARCHAR(255) NULL,
VV_CD NVARCHAR(255) NULL,
VV_SRC_CD_DESC NVARCHAR(255) NULL,
VV_DSC NVARCHAR(255) NULL )
AS
BEGIN
DECLARE @vv_SRC_CD NVARCHAR(255),
@vv_CD NVARCHAR(255),
@vv_SRC_CD_DESC NVARCHAR(255),
@vv_DSC NVARCHAR(255);
SELECT @vv_SRC_CD = A.VV_SRC_CD,
@vv_CD = A.VV_CD,
@vv_SRC_CD_DESC = A.VV_SRC_CD_DESC,
@vv_DSC = A.VV_DSC
FROM DBO.VALUES A
JOIN VVLOOKUP B
ON A.VV_SRC_CD = b.VV_SRC_CD
WHERE B.[CLIENT COLUMN NAME] = @ColName
RETURN;
END
Проблема в том, когда я вызываю функцию:
SELECT *
FROM DBO.Func_raw_data_xref('_CD');
Я не получаю результатов. Что я получаю, так это столбцы, на которые ссылается функция, но нет данных. Если я скопирую оператор select из функции и запустю его с допустимым параметром для @ColName, я получу результаты.
1 ответ
Решение
Вам не нужно присваивать результат вашего выбора локальным переменным. Что вам нужно сделать, это вставить результаты этого SELECT в табличную переменную, которую вы объявили как возвращаемое значение:
Вместо
DECLARE
@vv_SRC_CD NVARCHAR(255),
@vv_CD NVARCHAR(255),
@vv_SRC_CD_DESC NVARCHAR(255),
@vv_DSC NVARCHAR(255);
SELECT
@vv_SRC_CD = A.vv_SRC_CD,
@vv_CD = A.vv_CD,
@vv_SRC_CD_DESC = A.vv_SRC_CD_DESC,
@vv_DSC = A.vv_DSC
FROM DBO.values A
JOIN VVLookup B
ON A.vv_SRC_CD = b.vv_SRC_CD
WHERE B.[Client Column Name] = @ColName
Пытаться
INSERT INTO @VVSrcCDs
SELECT
A.vv_SRC_CD,
A.vv_CD,
A.vv_SRC_CD_DESC,
A.vv_DSC
FROM DBO.values A
JOIN VVLookup B
ON A.vv_SRC_CD = b.vv_SRC_CD
WHERE B.[Client Column Name] = @ColName