CREATE PROCEDURE dbo.InsertUser 
@sName varchar(50),
@sPassWord varchar(20),
@Count int
AS
select @Count=Max(Id) from Users 
begin 
    insert into Member (Id,Name,PassWord)
    values
    (@Count+1,@sName,@sPassWord)
end
GO

解决方案 »

  1.   

    除非你的数据库是ORACLE 否则建议使用 自增长ID 自段 不用你控制  她自己会自动增长的!!
    如果自己写就麻烦了  你要考虑到并发操作  还有删除以后是否会出现相同的ID
      

  2.   

    你在建立数据库的时候字段设置为autoincreatment就ok了
    这个是最简单的解决方法
    当然也可参考上面的
      

  3.   

    =============================================
    CREATE PROCEDURE dbo.InsertUser 
    @sName varchar(50),
    @sPassWord varchar(20),
    @Count int
    AS
    select @Count=Max(Id) from Users 
    begin 
        insert into Member (Id,Name,PassWord)
        values
        (@Count+1,@sName,@sPassWord)
    end
    GO
    ===============================================
    这个显然是有问题的。如果有一些数据以后删除一条非末尾记录,然后再添加就会出现重复ID应该Select Max(Id)+1作为ID       )
      

  4.   

    declare @max_id int
    declare @count int
    select @max_id = max(id)from users 
    select @count= count(*)from users
    if (@count=0)
       @max_id=1
    else
      @max_id= @max_id+1
      
      

  5.   

    为什么不用自增的字段呢?很好用呀。不过ORACLE的SEQUENCE就很难用了。
      

  6.   

    这样就可以实现你要的效果了吧?
    select questiontypeid,testNum,IDENTITY(int, 1,1) AS id1 into #temp from papersetting
    select * from #temp 
    drop table #temp
      

  7.   

    IDENTITY(int, 1,1) 为sql自增函数,自增种子为1,自增量为1,这个函数须只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。
    你可以把你的实现写在stored procedure or your sql script.
      

  8.   

    OLconn.Open();
    string cmdtxt1="SELECT MAX(号码) FROM 用户信息"; 
    SqlCommand OLcmd1=new SqlCommand(cmdtxt1,OLconn);
    SqlDataReader OLread;
    OLread1=OLcmd1.ExecuteReader();
    while(OLread.Read())
     {
     int maxnum=OLread.GetInt32(0)+1;
      }
    OLread1.Close();然后再用maxnum作为插入纪录的号码的值。
    INSERT INTO 用户信息(号码,昵称) VALUES (maxnum,'突突')不知是否可行?
      

  9.   

    数据库中已经有一个自增字段“标识”了,
    Sql Server不能同时有两个自增字段的。而如果实际要求要实现两个自增字段呢?
      

  10.   

    oracle的序列和触发器可以很好的实现这个功能。
      

  11.   

    思路可以放寬點用程序也可完成
    你只要抓max(i)然後再+1就可以了
      

  12.   

    一个低级的问题,不好意思:
    OLconn.Open();
    string cmdtxt1="SELECT MAX(号码) FROM 用户信息"; 
    SqlCommand OLcmd1=new SqlCommand(cmdtxt1,OLconn);
    SqlDataReader OLread;
    OLread1=OLcmd1.ExecuteReader();
    while(OLread.Read())
     {
     int maxnum=OLread.GetInt32(0)+1;
      }
    OLread1.Close();这样取成功的得了maxnum+1,但是怎样在while循环外面用 maxnum 的值?
    因为要用maxnum+1作为新用户的识别号码字段的值,构造新增用户的SQL语句
    INSERT INTO 用户信息(号码,昵称) VALUES (maxnum,'QQ')
    上面这样直接引用不行,maxnum属于while循环。
      

  13.   

    If there is a table like this:  Tab1
    -----------------------------
    ID      int
    Name    varchar(50)
    ----------------------------- Then the procedure of inserting data:
    -----------------------------------------
    CREATE PROCEDURE proc_insert @name varchar(50)
    as  declare @id int
      select @id=isnull(max(ID),0)+1 from Tab1  insert Tab1(ID,Name) values(@id,@name)
    -------------------------------------------
    OK, Just Done !
      

  14.   

    建立数据库的时候字段设置为autoincreatment就行了?
    在哪里设昵?不好意思是一个小的问题
      

  15.   

    楼主糊涂!
    int xn=1;
      while(OLread.Read())
      {
        int maxnum=OLread.GetInt32(0)+1;
        xn=maxnum;
       }
    不就可以了?哈,低级错误哦。