0

私のテーブル値関数は空の結果を返します。テーブル値関数が正しくフォーマットされているかどうかわかりません。

すべての変数をハードコーディングし、各 select ステートメントを単独で実行しましたが、結果を返すテーブルを取得できません。

また、テーブル変数を入力して @Table_Var を選択すると、正しい結果が返されたので、コードを構造化した方法と関係があります。

すべてのステートメントが正しく機能しています。関数からデータを返すのに問題があります。

誰かが私が間違っているとすぐに何かを見ますか?

編集

あまり混乱しないように、その緩いコードを関数に移動しました。

関数は正しく機能し、他のすべては、テーブルを返そうとしたときに受け入れます。

--select * from  [dbo].[fn_Professionals_GetMiniUserInfo](null,'a9cec535-ac48-4197-b8a0-87702cb14e52') 
ALTER FUNCTION [dbo].[fn_NonPros_GetMiniUserInfo] 
(
 @NonProID  INT = NULL,
 @UserID UNIQUEIDENTIFIER = NULL
) 
RETURNS 
    @Table_Var TABLE 
(
    -- Add the column definitions for the TABLE variable here
    Avatar     NVARCHAR(50), 
    ID         int,
    FName      varchar(50),
    LName      varchar(50),
    Title      varchar(20),
    UserID     UNIQUEIDENTIFIER,
    CompanyID  INT,
    CoWorkers  INT,
    Street     varchar(60),
    City       varchar(30),
    StateCD    char(2),
    ZipCode    varchar(5),
    WorksFor   VARCHAR(30),
    Phone      VARCHAR(12),
    Email      NVARCHAR(256)
)
AS
BEGIN

INSERT INTO @Table_Var

SELECT
    (SELECT [AFCCInc_Com].[dbo].[aspnet_fn_GetProfileElement]('Avatar',ap.PropertyNames,ap.PropertyValuesString )FROM AFCCInc_Com.dbo.aspnet_Profile ap
                                                                                                                 WHERE ap.UserId = nonPro.UserID)as'Avatar',
            na.NonProID'ID',c.FirstName'FName',c.LastName'LName',c.Title,@UserID 'UserID',
            ci.CompanyID,ci.CoWorkers,a.AddressLine, cit.City,s.StateCD,z.ZIPCode,ci.CompanyName'WorksFor',
            p.Phone,
                  (SELECT Email FROM AFCCInc_Com.dbo.aspnet_Membership m WHERE m.UserId = nonPro.UserID)'Email'

                  FROM  NonPros.NonPros nonPro         with(nolock)                                   JOIN
                  NonPros.utbNonProsUtbAddresses    na with(nolock) on na.NonProID = nonPro.NonProID  JOIN
                  dbo.fn_GetCompanyInfo(@UserID)    ci              ON ci.UserID   = nonPro.UserID    JOIN
                  Person.utbAddresses                a with(nolock) ON a.AddressID = na.AddressID     JOIN
                  [Person].[UtbAddressesutbContact] ac with(nolock)on ac.AddressID = a.AddressID      JOIN
                  Person.utbContact                  c with(nolock)ON ac.ContactID = c.ContactID      JOIN
                  Person.utbContactUtbPhones        cp with(nolock)ON c.ContactID = cp.ContactID      JOIN
                  Person.utbPhones                   p with(nolock)ON p.PhoneID = cp.PhonesID         JOIN
                  Person.utbZipCodes                 z WITH(NOLOCK) ON z.ZipCodeID = a.ZipCodeID      JOIN
                  Person.utbCitys                  cit WITH(NOLOCK) ON cit.CityID  = z.CityID         JOIN
                  Person.utbStates                   s WITH(NOLOCK) ON s.StateCD = z.StateCD

                  WHERE c.ContactTypeID = 7/*me*/ 
                  AND p.PhoneTypeID = 6/*main*/
                  AND nonPro.UserID = 'a9cec535-ac48-4197-b8a0-87702cb14e52';
    RETURN 
    END;


    alter FUNCTION fn_GetCompanyInfo (@UserID UNIQUEIDENTIFIER)
RETURNS 
@Table_Var TABLE 
(
    UserID      UNIQUEIDENTIFIER,
    CompanyID   INT, 
    CompanyName VARCHAR(50),
    CoWorkers   INT
)
AS
BEGIN

    INSERT INTO @Table_Var

          SELECT @UserID,
                 p.ProfessionalID, 
                 p.ProfessionalName,
                (SELECT COUNT(NonProID)'CoWorkers' FROM BuildingPros.utbProfessionalsUtbNonPros with(nolock)WHERE ProfessionalID = p.ProfessionalID)

                                    FROM BuildingPros.utbProfessionalsUtbNonPros bp with(nolock)                                       JOIN
                                         BuildingPros.utbProfessionals            p with(nolock)ON p.ProfessionalID = bp.ProfessionalID

                      WHERE bp.NonProID = (SELECT NonProID FROM NonPros.NonPros where UserID = @UserID);
    RETURN 
END

行く

4

1 に答える 1

0

コードをクリーンアップし、それらの選択をテーブル変数への挿入の上に移動した後、すべてが機能しました。

このセグメントが私の問題だったと思います。

**(SELECT [AFCCInc_Com].[dbo].[aspnet_fn_GetProfileElement]('Avatar',ap.PropertyNames,ap.PropertyValuesString)),**

.

SELECT
    (SELECT [AFCCInc_Com].[dbo].[aspnet_fn_GetProfileElement]('Avatar',ap.PropertyNames,ap.PropertyValuesString)),
            na.NonProID'ID',c.FirstName'FName',c.LastName'LName',c.Title,'a9cec535-ac48-4197-b8a0-87702cb14e52' 'UserID',
            ci.CompanyID,ci.CoWorkers,a.AddressLine, cit.City,s.StateCD,z.ZIPCode,ci.CompanyName'WorksFor',
            p.Phone,
                  (SELECT Email FROM AFCCInc_Com.dbo.aspnet_Membership m WHERE m.UserId = nonPro.UserID)'Email'

                  FROM  
                  NonPros.NonPros nonPro                                                  JOIN
                  AFCCInc_Com.dbo.aspnet_Profile ap      ON ap.UserId =nonPro.UserID       JOIN
                  NonPros.utbNonProsUtbAddresses    na   ON na.NonProID = nonPro.NonProID  JOIN
                  dbo.fn_GetCompanyInfo('a9cec535-ac48-4197-b8a0-87702cb14e52')    ci   ON ci.UserID   = nonPro.UserID    JOIN
                  Person.utbAddresses                a   ON a.AddressID = na.AddressID     JOIN
                  [Person].[UtbAddressesutbContact] ac   ON ac.AddressID = a.AddressID     JOIN
                  Person.utbContact                  c   ON ac.ContactID = c.ContactID     JOIN
                  Person.utbContactUtbPhones        cp   ON c.ContactID = cp.ContactID    JOIN
                  Person.utbPhones                   p   ON p.PhoneID = cp.PhonesID       JOIN
                  Person.utbZipCodes                 z   ON z.ZipCodeID = a.ZipCodeID      JOIN
                  Person.utbCitys                  cit   ON cit.CityID  = z.CityID         JOIN
                  Person.utbStates                   s   ON s.StateCD = z.StateCD

                  WHERE c.ContactTypeID = 7/*me*/ 
                  AND p.PhoneTypeID = 6/*main*/
                  AND nonPro.UserID = 'a9cec535-ac48-4197-b8a0-87702cb14e52'
    RETURN 
于 2013-02-15T04:09:42.707 に答える