我建立了一个表YG,字段如下:id       int(4)   主键
name     varChar(10)
sex      char(2)
age      int(4)
bmbh     varChar(10)我把id的标识设置为“是”,标识种子设置为“1”,标识递增量设置为“1”。然后我打开查询分析器,先后输入了下面两条SQL语句,结果都出错,请见下:1:
insert yg(id,name,age,sex,bmbh) values((select max(id) from yg)+1,'pm','25','m','bm1')
这时的出错信息是:服务器: 消息 1046,级别 15,状态 1,行 1
                  在此上下文中不允许使用子查询。只允许使用标量表达式。
2:
insert into yg(id,name,age,sex,bmbh) values(1,'pm','25','m','bm1')
这时的出错信息是:服务器: 消息 544,级别 16,状态 1,行 1
                  当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'yg' 中的标识列插入显式值。请问上面1、2哪里有问题啊?谢谢大家!

解决方案 »

  1.   

    我把id的标识设置为“是”,标识种子设置为“1”,标识递增量设置为“1”。---就不用给id值了 
    这样 
    insert yg(name,age,sex,bmbh) values('pm','25','m','bm1')
      

  2.   

    set IDENTITY_INSERT yg on
    insert into yg(id,name,age,sex,bmbh) values(1,'pm','25','m','bm1')
    set IDENTITY_INSERT yg off
      

  3.   

    因为你已经把“id的标识设置为“是”,标识种子设置为“1”,标识递增量设置为“1””了,因此就不用在插入语句中输入id的值了,它会自动增加的。
    即:insert into yg(name,age,sex,bmbh) values('pm','25','m','bm1')
      

  4.   

    谢谢楼上的,成功了!但还想再请教一下:假设现在表中有1---10个记录,如果我把ID=2的记录删除以后,那么表中就没有ID=2的记录了,而且我新添加的记录的ID则是11,这个时候有什么方法能让它们的ID重新变成有序的吗(即变回1---10)?
    我试着用下面的方法,却又出错了!见下:
    insert yg(id,name,age,sex,bmbh) values(2,'pm','25','m','bm1')服务器: 消息 544,级别 16,状态 1,行 1
    当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'yg' 中的标识列插入显式值。请问我想添加一条ID=2的记录又该怎么办呢?
    谢谢!
      

  5.   

    set IDENTITY_INSERT yg on
    insert into yg(id,name,age,sex,bmbh) values(2,'pm','25','m','bm1')
    set IDENTITY_INSERT yg off
      

  6.   

    当你设定ID为主键并且自动递增的时候,你是不能在INSERT语句中来进行插入的
    我的拙见LZ你怎么会有这样的需求呢
      

  7.   

    insert into YG(name, sex, age, bmbh) values('pm', 'm', 25, 'bm1')