随便问一下
1 挡在数据库设置一个主键id为自增时候,如下
id  name 
201 xiaowang
202 xiaofang
203 xiaoli 
当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。2 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢?
3 言归正传,我在网上看到了一个帖子
select max(id) from table where ... 
这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。
当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。

解决方案 »

  1.   

    1. 204
    2. 放在表1001行处
    3. 最大的id,也就是最后一行的id
      

  2.   

    1 挡在数据库设置一个主键id为自增时候,如下 
    id  name 
    201 xiaowang 
    202 xiaofang 
    203 xiaoli 
    当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。 
    -------
    2042 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢? 
    ---
    建议看看存储引擎
    3 言归正传,我在网上看到了一个帖子 
    select max(id) from table where ... 
    这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。 ---
    max () 是最大的ID,当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。--select IDENT_CURRENT( 'table_name' )
      

  3.   

    if object_id('tb') is not null drop table tb
    go
    create table tb(id int identity primary key,name nvarchar(2))
    go
    insert into tb(name)
     select '张三' union all
     select '李四' union all
     select '王五'SELECT IDENT_CURRENT('tb') --取最后插入的ID
    /*
    ---------------------------------------
    3(1 行受影响)
    */
      

  4.   

    获取指定表中最后生成的标识值可使用函数IDENT_CURRENT,用法:
    SELECT IDENT_CURRENT('表名') 
    注意事项:当包含标识列的表刚刚创建,为经过任何插入操作时,使用IDENT_CURRENT函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。
      

  5.   

    貌似也可以用
    select @@identity
      

  6.   

    随便问一下 
    1 挡在数据库设置一个主键id为自增时候,如下 
    id  name 
    201 xiaowang 
    202 xiaofang 
    203 xiaoli 
    当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。 
    --id是204  ************************
    2 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢? 
    --放在表1001行处 *******************************************************
    3 言归正传,我在网上看到了一个帖子 
    select max(id) from table where ... 
    这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。 
    当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。--select IDENT_CURRENT( 'tablename' ) 
      

  7.   

    随便问一下 
    1 挡在数据库设置一个主键id为自增时候,如下 
    id  name 
    201 xiaowang 
    202 xiaofang 
    203 xiaoli 
    当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。 
    --id是204  ************************
    2 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢? 
    --放在表1001行处 *******************************************************
    3 言归正传,我在网上看到了一个帖子 
    select max(id) from table where ... 
    这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。 
    当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。--select IDENT_CURRENT( 'tablename' ) 
      

  8.   

    随便问一下 
    1 挡在数据库设置一个主键id为自增时候,如下 
    id  name 
    201 xiaowang 
    202 xiaofang 
    203 xiaoli 
    当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。 
    --id是204  ************************
    2 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢? 
    --放在表1001行处 *******************************************************
    3 言归正传,我在网上看到了一个帖子 
    select max(id) from table where ... 
    这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。 
    当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。--select IDENT_CURRENT( 'tablename' ) 
      

  9.   


    6、获取标识列的种子值可使用函数IDENT_SEED,用法:
    SELECT IDENT_SEED ('表名')7、获取标识列的递增量可使用函数IDENT_INCR ,用法:
    SELECT IDENT_INCR('表名')8、获取指定表中最后生成的标识值可使用函数IDENT_CURRENT,用法:
    SELECT IDENT_CURRENT('表名') 
    注意事项:当包含标识列的表刚刚创建,为经过任何插入操作时,使用IDENT_CURRENT函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。
      

  10.   

     SQL标识列初探
    一、标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列。
    该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型
    2、在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值
    3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。由于以上特点,使得标识列在数据库的设计中得到广泛的使用。二、标识列的组成
    创建一个标识列,通常要指定三个内容:
    1、类型(type)
    在SQL Server 2000中,标识列类型必须是数值类型,如下:
    decimal、int、numeric、smallint、bigint 、tinyint 
    其中要注意的是,当选择decimal和numeric时,小数位数必须为零
    另外还要注意每种数据类型所有表示的数值范围2、种子(seed)
    是指派给表中第一行的值,默认为13、递增量(increment)
    相邻两个标识值之间的增量,默认为1。三、标识列的创建与修改
    标识列的创建与修改,通常在企业管理器和用Transact-SQL语句都可实现,使用企业管理管理器比较简单,请参考SQL Server的联机帮助,这里只讨论使用Transact-SQL的方法1、创建表时指定标识列
    标识列可用 IDENTITY 属性建立,因此在SQL Server中,又称标识列为具有IDENTITY属性的列或IDENTITY列。
    下面的例子创建一个包含名为ID,类型为int,种子为1,递增量为1的标识列
    CREATE TABLE T_test
    (ID int IDENTITY(1,1),
    Name varchar(50)
    )2、在现有表中添加标识列
    下面的例子向表T_test中添加一个名为ID,类型为int,种子为1,递增量为1的标识列
    --创建表
    CREATE TABLE T_test
    (Name varchar(50)
    )--插入数据
    INSERT T_test(Name) VALUES('张三')--增加标识列
    ALTER TABLE T_test
    ADD ID int IDENTITY(1,1)3、判段一个表是否具有标识列可以使用 OBJECTPROPERTY 函数确定一个表是否具有 IDENTITY(标识)列,用法:
    Select OBJECTPROPERTY(OBJECT_ID('表名'),'TableHasIdentity')
    如果有,则返回1,否则返回04、判断某列是否是标识列可使用 COLUMNPROPERTY 函数确定 某列是否具有IDENTITY 属性,用法
    SELECT COLUMNPROPERTY( OBJECT_ID('表名'),'列名','IsIdentity')
    如果该列为标识列,则返回1,否则返回04、查询某表标识列的列名
    SQL Server中没有现成的函数实现此功能,实现的SQL语句如下
    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns
       WHERE TABLE_NAME='表名' AND COLUMNPROPERTY(      
          OBJECT_ID('表名'),COLUMN_NAME,'IsIdentity')=15、标识列的引用如果在SQL语句中引用标识列,可用关键字IDENTITYCOL代替
    例如,若要查询上例中ID等于1的行,
    以下两条查询语句是等价的
    SELECT * FROM T_test WHERE IDENTITYCOL=1
    SELECT * FROM T_test WHERE ID=16、获取标识列的种子值可使用函数IDENT_SEED,用法:
    SELECT IDENT_SEED ('表名')7、获取标识列的递增量可使用函数IDENT_INCR ,用法:
    SELECT IDENT_INCR('表名')8、获取指定表中最后生成的标识值可使用函数IDENT_CURRENT,用法:
    SELECT IDENT_CURRENT('表名') 
    注意事项:当包含标识列的表刚刚创建,为经过任何插入操作时,使用IDENT_CURRENT函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。
      

  11.   

    第3个也可以用 select SCOPE_IDENTITY( )取。
    看一下这个:
    http://blog.csdn.net/sdhdy/archive/2009/04/26/4126265.aspx
      

  12.   

    SELECT IDENT_CURRENT('表名') 
      

  13.   


    2042 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢? 
        分两种情况,如果你的表以ID建了一个聚集索引的话,那么他就放到最后,如果只是普通索引或是没有索引的话,他就放在任何前面被删除的记录中间3 言归正传,我在网上看到了一个帖子 
    select max(id) from table where ... 
    这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。 
    当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。

    SELECT @@IDENTITY;
      

  14.   

    1 2042 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢? 
      分两种情况,如果你的表以ID建了一个聚集索引的话,那么他就放到最后,如果只是普通索引或是没有索引的话,他就放在任何前面被删除的记录中间3 言归正传,我在网上看到了一个帖子 
    select max(id) from table where ... 
    这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。 
    当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。SELECT @@IDENTITY;
      

  15.   


    insert into UserTest(name)   --UserTest是表名字
     select '你好' 
    SELECT IDENT_CURRENT('UserTest')