0

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 の有効なパラメーターを指定して実行すると、結果が得られます。

4

1 に答える 1

2

選択の結果をローカル変数に割り当てる必要はありません。あなたがしなければならないことは、戻り値として宣言したテーブル変数にその SELECT の結果を INSERT することです:

それ以外の

  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
于 2013-08-26T21:24:45.870 に答える