2013-06-28 3 views
1

У меня возникают проблемы с T-SQL. Я новичок в T-SQL.Справка по хранимой процедуре T-SQL: получение друзей пользователя из таблицы друзей

У меня есть база данных записей друзей. Один столбец содержит MemberA_ID, который является идентификатором целого числа для одного из ID члена друга в паре друзей. Еще один столбец содержит MemberB_ID, который является идентификатором целого числа для идентификатора участника другого друга у пары друзей.

Итак, если идентификатор Мэри равен 1, а идентификатор Джона - 2, и они друзья, то строка в таблице друзей будет содержать 1 и 2 (среди других данных).

Я пытаюсь написать хранимую процедуру T-SQL, которая принимает идентификатор члена в качестве входных данных и получает для всех друзей этого члена свой членID и имя пользователя (имя пользователя хранится в другой таблице с именем MemberProfiles).

Я пробовал этот код, но он не принимается.

ALTER PROCEDURE dbo.GetFriends (@ownMemberID [int]) 

    AS 

    DECLARE @localFriendID_A AS INTEGER 
    DECLARE @localFriendID_B AS INTEGER 

    IF EXISTS 
    (
     SELECT @localFriendID_B = MemberB_ID 
     FROM Friends 
     WHERE (StartDate IS NOT NULL) AND (EndDate IS NULL) 
     AND (RequestRejectDate IS NULL) AND (MemberA_ID = @ownMemberID) 
    ) 
    BEGIN 
     SELECT MemberID, VisibleUsername 
     FROM MemberProfiles 
     WHERE (MemberID = @localFriendID_B) 
    END 

    ELSE IF EXISTS 
    (
     SELECT @localFriendID_A = MemberA_ID 
     FROM Friends 
     WHERE (StartDate IS NOT NULL) AND (EndDate IS NULL) 
     AND (RequestRejectDate IS NULL) AND (MemberB_ID = @ownMemberID) 
    ) 
    BEGIN 
     SELECT MemberID, VisibleUsername 
     FROM MemberProfiles 
     WHERE (MemberID = @localFriendID_A) 
    END 

    RETURN 

ответ

1

Единственная проблема с выше код, вы пытаетесь инициализировать при проверке существования ряда ...

вы должны написать TSQL, как показано ниже

ALTER PROCEDURE dbo.GetFriends (@ownMemberID [int]) 

AS 

DECLARE @localFriendID_A AS INTEGER 
DECLARE @localFriendID_B AS INTEGER 

SET @localFriendID_A = 0 
SET @localFriendID_B = 0 

SELECT @localFriendID_B = MemberB_ID 
FROM Friends 
WHERE (StartDate IS NOT NULL) AND (EndDate IS NULL) 
AND (RequestRejectDate IS NULL) AND (MemberA_ID = @ownMemberID) 


SELECT @localFriendID_A = MemberA_ID 
FROM Friends 
WHERE (StartDate IS NOT NULL) AND (EndDate IS NULL) 
AND (RequestRejectDate IS NULL) AND (MemberB_ID = @ownMemberID) 

IF (@localFriendID_B <> 0) 
BEGIN 
    SELECT MemberID, VisibleUsername 
    FROM MemberProfiles 
    WHERE (MemberID = @localFriendID_B) 
END 
ELSE IF (@localFriendID_A <> 0) 
BEGIN 
    SELECT MemberID, VisibleUsername 
    FROM MemberProfiles 
    WHERE (MemberID = @localFriendID_A) 
END 

RETURN 
+0

Пробовал это, и это сработало. Я понимаю свою ошибку. Благодарю. – user2225945