本人初学t-sql, 想征求asp编写的社区型网站中加为好友功能的存储过程addFriend, 通过对比学习达到提升自己水平的目的。 
CREATE TABLE [dbo].[Member] ( 
[ID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL , 
[username] varchar(20) NOT NULL , 
[sex] char(2) NOT NULL  

GO CREATE TABLE [dbo].[Friend] ( 
[ID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL , 
[Add_User_ID] [int] REFERENCES [dbo].[Member]([ID]) NULL , 
[Friend_User_ID] [int] REFERENCES [dbo].[Member]([ID]) NULL , 
[Add_Datetime] [smalldatetime] default (getdate()) NULL  

GO CREATE PROCEDURE [dbo].[addFriend] 
-----此处所列出的参数仅表达本人意思,参数安排可自定, 
@status tinyint output, -----状态输出 
@ID int, ---- 被加者ID 
@MyID int, ---- 加者的ID 
@MySex char(2) ---- 加者的性别 
AS 
set nocount on 
begin ......... 
/*
说明:
如果被加者不存在返回不存在消息, 
如果被加者已是好友返回已是好友消息, 
如果被加者和加者性别相同返回性别相同消息, 以上"如果"都不存在则执行添加好友 */......... 
end 
GO 

解决方案 »

  1.   

    CREATE PROCEDURE [dbo].[addFriend]  
    -----此处所列出的参数仅表达本人意思,参数安排可自定,  
    @ID int, ---- 被加者ID  
    @MyID int, ---- 加者的ID  
    @MySex char(2) ---- 加者的性别  
    AS  
    set nocount on  
    begin  
    if not exists(select 1 from member where id = @myid)
        return 1
    else
       if exists(select 1 from friend  where friend_user_id = @id and add_user_id = @myid)
          return 2
       else
         if exists(select 1 from  member  where  id = @id  and sex = @mysex)
            return 3
         else
            insert into friend(add_user_id,friend_user_id,add_datetime)
            select  @myid,@id,@mysex
      
    /* 
    说明: 
    如果被加者不存在返回不存在消息,  
    如果被加者已是好友返回已是好友消息,  
    如果被加者和加者性别相同返回性别相同消息,  以上"如果"都不存在则执行添加好友  */  
    end  
    GO  
      

  2.   

    CREATE PROCEDURE [dbo].[addFriend]  
    -----此处所列出的参数仅表达本人意思,参数安排可自定,  
    @ID int, ---- 被加者ID  
    @MyID int, ---- 加者的ID  
    @MySex char(2) ---- 加者的性别  
    AS  
    set nocount on  
    begin  
    if not exists(select 1 from member where id = @myid)
        return 1
    else
       if exists(select 1 from friend  where friend_user_id = @id and add_user_id = @myid)
          return 2
       else
         if exists(select 1 from  member  where  id = @id  and sex = @mysex)
            return 3
         else
         begin
            insert into friend(add_user_id,friend_user_id,add_datetime)
            select  @myid,@id,@mysex
            return 0
         end
    /* 
    说明: 
    如果被加者不存在返回不存在消息,  
    如果被加者已是好友返回已是好友消息,  
    如果被加者和加者性别相同返回性别相同消息,  以上"如果"都不存在则执行添加好友  */  
    end  
    GO  
      

  3.   


    --大致是这样,自己改改.另:friend表无性别字段.如果被加者和加者性别相同返回性别相同消息,这个做不了.
    CREATE PROCEDURE [dbo].[addFriend]  
    -----此处所列出的参数仅表达本人意思,参数安排可自定,  
    @status varchar(20) output, -----状态输出  
    @ID int, ---- 被加者ID  
    @MyID int, ---- 加者的ID  
    @MySex char(2) ---- 加者的性别  
    AS  
    set nocount on  
    begin  
      declare @i as int
      set @i = 0
      if not exists (select 1 from friend where Add_User_ID = @myid and Friend_User_ID @ID)
      begin
        set @status = '如果被加者不存在返回不存在消息'
        set @i = 1
      end
      if exists (select 1 from friend where Add_User_ID = @myid and Friend_User_ID @ID)
      begin
         set @status = '如果被加者已是好友返回已是好友消息'
        set @i = 1
      end
      if @i = 0 
         insert 则执行添加好友 
    end
      

  4.   

    to: 潇洒老乌龟
    加者和被加者都是member里的记录,怎么没性别呢????