大哥们:   我写了个存储过程,就是增加一条记录到数据库,其实就是增加一个用户到数据库中。我并没有判断数据库是否已经存在这个用户,如果存在就提示或返回一个结果值,再进行判断是否已经有该用户了,请问这样的存储过程语句要怎么写或怎么做???求你们了,最好说详细些,我特笨!
就是在删除或增加以前,如何先判断该记录是否已经存在的问题??怎么做???方法不局限一种,谢谢了!

解决方案 »

  1.   

    一个最近简单的办法就是不在存储里去判断。而在执行存储过程的时候判断是否出现异常。SqlException有一个特定的异常号是表示主键重复的。还有就是在插入前进行判断
    DECLARE @Count INT
    SELECT @Count = COUNT(*) From table Where ID = @ID
    IF(@Count > 0)
    {
       RETURN @Count   //返回大于0
    }
    ELSE
    {
       INSERT ......
    }
      

  2.   

    CREATE PROCEDURE sysEmpInsert
       @loginid varchar(50),
       @password varchar(50),
       @empid int output,
       @reason varchar(50) output
      
    AS
             select loginid from mrBase where  LoginID = @loginid
             if (@@RowCount<1)
                begin ----1
                   set  @reason ='noEmp'
                 end------1
    RETURNGO
      

  3.   

    ALTER PROCEDURE UserCreate
    (
    @UserID varchar (50)
    )
    /*
    (
    @parameter1 datatype = default value,
    @parameter2 datatype OUTPUT
    )
    */
    AS
    IF EXISTS ( SELECT ID FROM UserInfo WHERE UserID = @UserID )
    SELECT 1

    ELSE
    BEGIN
    INSERT INTO UserInfo (UserID) VALUES(@UserID)
    SELECT 0
    END
    RETURN 使用SqlCommand.ExecuteScalar()读出返回值,如果为1则存在用户,0则添加成功
      

  4.   

    ALTER PROCEDURE UserCreate
    (
    @UserID varchar (50)
    )AS
    INSERT INTO UserInfo (UserID) VALUES(@UserID)

    if (@@error<>0)
    select 0 
    else
    select 1-----插入一条记录,重复时出错
      

  5.   

    楼上的这位大哥,ALTER 是什么意思???为什么不用Create????谢谢了
      

  6.   

    还有各位大哥,如何接收存储过程的返回值,如 第一楼的:IF(@Count > 0)
    {
       RETURN @Count   //返回大于0这个@Count,我怎么接收他的值,怎么写,我很笨,太谢了!
      

  7.   

    ALTER修改吧……
    建议楼主多看看基础!!-__-!