1

我在使用 T-SQL 时遇到问题。我是 T-SQL 的初学者。

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

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

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

1 回答 1

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
于 2013-06-28T05:17:45.037 回答