T-SQL 存储过程帮助:从"好友"表中获取某人的好友



我在T-SQL方面遇到问题。我是T-SQL的初学者。

我有一个朋友条目的数据库。其中一列包含MemberA_ID,它是一对好友中某个好友的成员ID的整数ID。另一列包含MemberB_ID,它是一对好友中另一个好友的成员ID的整数ID。

因此,如果Mary的ID是1,John的ID是2,并且他们是朋友,那么friends表中的一行将包含1和2(以及其他数据)。

我正在尝试编写一个T-SQL存储过程,该过程将成员ID作为输入,并为该成员的所有朋友检索他们的成员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

上面代码的唯一问题是,您在检查行的存在时试图初始化。。。

您必须将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

最新更新