你这样再试一下,应该可以的~~
CREATE  PROCEDURE p_StudentAdd
@StudentID varchar(13),
@StudentName varchar(10),
@ClassSN int,
@StudentSex bit,
@ReturnID int output
AS
if exists(select StudentID from Students Where StudentID = @StudentID)
SET @ReturnID = 1
else
  BEGIN
Insert Students(StudentID,StudentName,ClassSN,StudentSex)
        values(@StudentID,@StudentName,@ClassSN,@StudentSex) 
SET @ReturnID = 0
  END

解决方案 »

  1.   

    其实你那样写,也是正确的,只不过没有必要,
    因为存储过程的输入参数,在执行时一定要传值的,
    没有必要判断都是非空如果还是不好用的话,请检查表中的数据,或者你把表中数据贴出来,大家分析~不知道你在执行这个存储过程是怎么执行的。
    看是否是这样的:declare @ReturnID  int
    exec yy1 '002','jim',1,0,@ReturnID output
    select @ReturnID ReturnID 
      

  2.   

    如果仅仅要这样的作用,那么直接用Return值即可,不用特地用一个返回值来返回!
    CREATE  PROCEDURE p_StudentAdd
    @StudentID varchar(13),
    @StudentName varchar(10),
    @ClassSN int,
    @StudentSex bit
    AS
    if exists(select StudentID from Students Where StudentID = @StudentID)
    Return 1
    else
      BEGIN
    Insert Students(StudentID,StudentName,ClassSN,StudentSex)
            values(@StudentID,@StudentName,@ClassSN,@StudentSex) 
    Return 0
      END然后你的asp:
    ...
    set comm=server.createobject("ADODB.command") 
    set comm.ActiveConnection = cn 'cn为你的connection
    comm.commandtype = adCmdStoredProc  'adCmdStoredProc  = 4
    comm.commandtext = "DBO.p_StudentAdd"
    comm.parameters.Refresh
    comm.parameters("@StudentID") = request.form("txtStudentID")
    comm.parameters("@StudentName") = request.form("txtStudentName")
    comm.parameters("@ClassSN") = request.form("txtClassSN")
    comm.parameters("@StudentSex") = request.form("txtStudentSex")  comm.execute
    if comm.parameters(0) = "0" then  ---这个就是return值
                response.write "已经存在该笔纪录"
    else
                response.write "成功添加该笔纪录"
             end if
                response.end---我一直这样做,像这种只要返回一个标志的,我都只用return值!
      

  3.   

    存储过程已经改成 MorningTea(一勺抹茶) 的那样了,但是还是不行,我把ASP页面和数据库都放上来,麻烦大家再帮忙看看。下载地址:http://comet.wapjh.com/temp/test.rar