SQL Server中自动获取编号字段

   ①像Access中的自动编号字段

  右键你的表-->设计表-->找到你的id字段(类int型)-->标识-->是-->标识种子(初始值)-->标识递增量-->OK

  ②用IDENTITY (SEED,INCREMENT)参数

  seed -启始值

  increment -增量

  CREATE TABLE 表名(

  你的ID IDENTITY (1, 1) NOT NULL ,你的其他字段... )

  CREATE TABLE 表名(

  你的字段ID AUTOINCREMENT(1000,10),其他字段... )

  ③修改起始值和步进值

  ALTER TABLE 表名 ALTER COLUMN 你的字段ID COUNTER(2000,50)

  ④让一个删空的表自动增加字段的开始值重新从1开始

  ALTER TABLE 表名 ALTER COLUMN 你的字段ID COUNTER(1,1)

  上述3 4只适用与Access,COUNTER为其一种数据类型,可以在Access中指定一不是自动编号的字段为自动编号字段,也可以让一自动编号字段重新从指定值按指定步长自动编号。但是如果表中有数据,用户不能用该语句来将该列的数据类型改变为COUNTER 数据类型。对于SQL Server并不支持。

  对于SQL Server我们或许总希望用Alter Table 表名 Alter Column 你的字段 IDENTITY(1,1)

  来指定字段重新从1开始计数,但是这句话本身是错误的,好长时间我也疑惑为什么这句话不能执行。如果我们看看MS 对Alter Table语句的定义就清楚了,这句话根本是错误的。下面是MS对Alter Table语句的定义。

  ALTER TABLE table

  { [ ALTER COLUMN column_name

  { new_data_type [ ( precision [ , scale ] ) ]

  [ COLLATE < collation_name > ]

  [ NULL | NOT NULL ]

  | {ADD | DROP } ROWGUIDCOL }

  ]

  | ADD

  { [ < column_definition > ]

  | column_name AS computed_column_expression

  } [ ,...n ]

  | [ WITH CHECK | WITH NOCHECK ] ADD

  { < table_constraint > } [ ,...n ]

  | DROP

  { [ CONSTRAINT ] constraint_name

  | COLUMN column } [ ,...n ]

  | { CHECK | NOCHECK } CONSTRAINT

  { ALL | constraint_name [ ,...n ] }

  | { ENABLE | DISABLE } TRIGGER

  { ALL | trigger_name [ ,...n ] }

  }

  < column_definition > ::=

  { column_name data_type }

  [ [ DEFAULT constant_expression ] [ WITH VALUES ]

  | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]

  ]

  [ ROWGUIDCOL ]

  [ COLLATE < collation_name > ]

  [ < column_constraint > ] [ ...n ]

  < column_constraint > ::=

  [ CONSTRAINT constraint_name ]

  { [ NULL | NOT NULL ]

  | [ { PRIMARY KEY | UNIQUE }

  [ CLUSTERED | NONCLUSTERED ]

  [ WITH FILLFACTOR = fillfactor ]

  [ ON { filegroup | DEFAULT } ]

  ]

  | [ [ FOREIGN KEY ]

  REFERENCES ref_table [ ( ref_column ) ]

  [ ON DELETE { CASCADE | NO ACTION } ]

  [ ON UPDATE { CASCADE | NO ACTION } ]

  [ NOT FOR REPLICATION ]

  ]

  | CHECK [ NOT FOR REPLICATION ]

  ( logical_expression )

  }

  < table_constraint > ::=

  [ CONSTRAINT constraint_name ]

  { [ { PRIMARY KEY | UNIQUE }

  [ CLUSTERED | NONCLUSTERED ]

  { ( column [ ,...n ] ) }

  [ WITH FILLFACTOR = fillfactor ]

  [ ON { filegroup | DEFAULT } ]

  ]

  | FOREIGN KEY

  [ ( column [ ,...n ] ) ]

  REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]

  [ ON DELETE { CASCADE | NO ACTION } ]

  [ ON UPDATE { CASCADE | NO ACTION } ]

  [ NOT FOR REPLICATION ]

  | DEFAULT constant_expression

  [ FOR column ] [ WITH VALUES ]

  | CHECK [ NOT FOR REPLICATION ]

  ( search_conditions )

  }

  可以看到,IDENTITY只是在< column_definition >中,也就是说,我们可以这样使用

  Alter Table 表名 Add 字段名 Int IDENTITY(1,1)

  即,我们可以增加一个字段并指定它为自动编号字段。但是不能更改一个字段为自动编号字段(也或许我没找到方法)。即,如果我们想给表增加自动编号字段,只能使用添加字段的方法,而不能更改一个已有的字段为自动编号字段。

  至于如果需要更改自动编号字段计数起始值可以使用DBCC命令:

  DBCC CHECKIDENT (表名,RESEED,100)

  自动编号字段下一个从101开始计。

时间: 2024-10-02 18:37:15

SQL Server中自动获取编号字段的相关文章

SQL Server 中调整自增字段的当前初始值_MsSql

前几天在把一个Communtiy Server 的数据库从SQL 2000升级到SQL 2005 的时候,碰到一个怪异的问题,报如下错误: Violation of PRIMARY KEY constraint 'PK_cs_Threads'. Cannot insert duplicate key in object 'dbo.cs_Threads'. 分析进去后,竟然发现这个表的自增字段数据库中已经达到了6144,而数据库维护的这个表的初始自增值只到6109. 解决方法很简单,利用以下SQL

SQL Server 中调整自增字段的当前初始值

前几天在把一个Communtiy Server 的数据库从SQL 2000升级到SQL 2005 的时候,碰到一个怪异的问题,报如下错误: Violation of PRIMARY KEY constraint 'PK_cs_Threads'. Cannot insert duplicate key in object 'dbo.cs_Threads'. 分析进去后,竟然发现这个表的自增字段数据库中已经达到了6144,而数据库维护的这个表的初始自增值只到6109. 解决方法很简单,利用以下SQL

SQL Server中text或ntext 字段内容替换方法

  update 表名 set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值') 1.update ntext: (1)varchar和nvarchar类型是支持replace,所以如果你的text/ntext不超过8000/4000可以先转换成前面两种类型再使用replace. update 表名 set text类型字段名=replace(convert(varchar(8000),text类型字段名),

SQL Server中的SQL语句优化与效率问题

很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select * from table1 where name='zhangsan' and tID > 10000 和执行: select * from table1 where tID > 10000 and name='zhangsan' 一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那

Sql Server中如何实现主键由字母数字组成并按照数字自动增长

在SQL SERVER 中如果我们想要使主键按照一定规则自动增长我们可以这样做: 这里我们新建一张研究表,里面有研究ID,研究人员姓名和研究医院. 我们使SicentificId 设为主键 并且从1开始每次递加1. 这里要更各位强调一下使用Identity 关键字的前提要求是 数据类型必须为 int ,decimal,bigint,smallint等数值类型. 但是很多时候只有一个数字编号并不能满足我们的要求, 这里笔者的需求就是编号要按照字母加数字的组合,并且字母固定且数字每次递增1. 那么我

InfoPath开发实战(3):获取SQL Server中的数据

本节的内容: 如何在InfoPath中使用数据连接来从SQL Server数据库中获取数据 如何通过代码来修改数据连接中的SQL查询 在开始设计InfoPath表单之前,先准备一个数据库,InfoPath支持两种数据库连接: Microsoft Office Access数据库(.mdb文件或.accdb文件) Microsoft SQL Server数据库 需要注意的是,InfoPath虽然支持SQL Server Express数据库,但却不支持以文件的形式连接SQL Server Expr

在SQL Server中修改字段类型和字段名称

  在SQL Server中修改字段类型和字段名称 --以下是完整的SQL执行语句 if exists(select * from syscolumns where id=object_id('数据表名称') and name='字段名') --判断该字段是否存在 begin ALTER TABLE 表明 ALTER COLUMN 字段名 VARCHAR(64);--更改类型 end GO if exists(select * from syscolumns where id=object_id

SQL Server 中BIT类型字段增删查改那点事

原文:SQL Server 中BIT类型字段增删查改那点事 话说BIT类型字段之前,先看"诡异"的一幕,执行Update成功,但是查询出来的结果依然是1,而不是Update的2 当别人问起我来的时候,本人当时也是处于懵逼状态的,后面联想具体的业务突然想起来这个字段是bit类型的 如果把这个现象跟BIT类型字段连续起来就不觉得奇怪了. 废话不多,直接上代码看结果就好了. 先建一个测试表 CREATE TABLE TestBIT ( Id INT IDENTITY(1,1), BitCol

vb.net 结构树sql表中自动编号在另一张表中怎么能同时更新

问题描述 vb.net 结构树sql表中自动编号在另一张表中怎么能同时更新 我在用VB.NET和SQL做treeview结构树 时 数据库中有两张表 一张是结构树表 一张是结构树数属性表 结构树表的编号是自动编号的 我怎么将结构树中的自动编号 放到另一张属性表中 解决方案 两张表肯定要有主外键关联的啊,通过联表查询可得 解决方案二: 在sql中设置级联更新或者用触发器