2013-08-26 84 views
0

我已经成功地在2008年创建的SQL函数:函数返回空集

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的有效参数运行它,我确实会得到结果。

回答

2

您不必将选择的结果赋给局部变量。你所要做的就是那个INSERT结果SELECT INTO表变量你声明为返回值:

而不是

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