SQLSERVER 里实现ORACLE里的Sequence 的功能(亲自实践)
2012-07-05 14:24
567 查看
ORACLE里的Sequence 可以实现自动增加的功能,在SQLSERVER 中通过定义项目的属性 IDENTITY 来实现
在下面的例子中,定义一个表storeID,其中的字段ID 作为自动增加项目:
--声明使用哪个数据库
USE VC
--删除已有的storeID表
IF EXISTS(SELECT TABLE_NAME from INFORMATION_SCHEMA .TABLES
WHERE TABLE_NAME ='storeID')
DROP TABLE storeID
GO
--创建表
CREATE TABLE storeID
(
--ID列为自增列(第一个参数是起始值,第二个参数是每次增加值)
ID int identity(8000,1) ,
--name列内容任意,只是为了能够通过插入name列,来实现ID列自动增加
name varchar(1)
)
---测试
insert into VC.dbo.storeID(name)
values('a')
insert into VC.dbo.storeID(name)
values('b')
---结果:查看表storeID,结果有一条数据,其ID列值自动增加,MAX值为8001
SELECT MAX(ID)
FROM storeID
IDENTITY(属性)
在表中创建一个标识列。该属性与 CREATE TABLE 及 ALTER TABLE Transact-SQL 语句一起使用。
说明 IDENTITY 属性与 SQL-DMO Identity 属性不同,后者表现列的行标识属性。
语法
IDENTITY [ ( seed , increment ) ]
参数
seed
装载到表中的第一个行所使用的值。
increment
增量值,该值被添加到前一个已装载的行的标识值上。
必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。
注释
如果在经常进行删除操作的表中存在着标识列,那么在标识值之间可能会产生差距。如果这构成了问题,那么请不要使用 IDENTITY 属性。但是,为了确保未产生差距,或者为了弥补现有的差距,在用 SET IDENTITY_INSERT ON 显式地输入标识值之前,请先对现有的标识值进行计算。
如果重新使用已删除的标识值,那么请使用示例 B 中的示例代码进行检查,以获得下一个可用的标识值。请用您的表名、标识列数据类型以及(该数据类型的)最大可允许值的数值 –1 替换 tablename、column_type 和 max(column_type) – 1。
使用 DBCC CHECKIDENT 检查当前的标识值,并将其与标识列中的最大值进行比较。
当将 IDENTITY 属性与 CREATE TABLE 一起使用时,Microsoft SQL Server; 使用 CREATE TABLE 的 NOT FOR REPLICATION 选项替代标识列的自动增加。通常,SQL Server 给插入表中的每个新行指派一个值,该值比前面的最高值要大出某些增量。但是,如果新行是由另一个数据源复制过来的,那么标识值必须保持与其在数据源中完全相同。
在下面的例子中,定义一个表storeID,其中的字段ID 作为自动增加项目:
--声明使用哪个数据库
USE VC
--删除已有的storeID表
IF EXISTS(SELECT TABLE_NAME from INFORMATION_SCHEMA .TABLES
WHERE TABLE_NAME ='storeID')
DROP TABLE storeID
GO
--创建表
CREATE TABLE storeID
(
--ID列为自增列(第一个参数是起始值,第二个参数是每次增加值)
ID int identity(8000,1) ,
--name列内容任意,只是为了能够通过插入name列,来实现ID列自动增加
name varchar(1)
)
---测试
insert into VC.dbo.storeID(name)
values('a')
insert into VC.dbo.storeID(name)
values('b')
---结果:查看表storeID,结果有一条数据,其ID列值自动增加,MAX值为8001
SELECT MAX(ID)
FROM storeID
IDENTITY(属性)
在表中创建一个标识列。该属性与 CREATE TABLE 及 ALTER TABLE Transact-SQL 语句一起使用。
说明 IDENTITY 属性与 SQL-DMO Identity 属性不同,后者表现列的行标识属性。
语法
IDENTITY [ ( seed , increment ) ]
参数
seed
装载到表中的第一个行所使用的值。
increment
增量值,该值被添加到前一个已装载的行的标识值上。
必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。
注释
如果在经常进行删除操作的表中存在着标识列,那么在标识值之间可能会产生差距。如果这构成了问题,那么请不要使用 IDENTITY 属性。但是,为了确保未产生差距,或者为了弥补现有的差距,在用 SET IDENTITY_INSERT ON 显式地输入标识值之前,请先对现有的标识值进行计算。
如果重新使用已删除的标识值,那么请使用示例 B 中的示例代码进行检查,以获得下一个可用的标识值。请用您的表名、标识列数据类型以及(该数据类型的)最大可允许值的数值 –1 替换 tablename、column_type 和 max(column_type) – 1。
使用 DBCC CHECKIDENT 检查当前的标识值,并将其与标识列中的最大值进行比较。
当将 IDENTITY 属性与 CREATE TABLE 一起使用时,Microsoft SQL Server; 使用 CREATE TABLE 的 NOT FOR REPLICATION 选项替代标识列的自动增加。通常,SQL Server 给插入表中的每个新行指派一个值,该值比前面的最高值要大出某些增量。但是,如果新行是由另一个数据源复制过来的,那么标识值必须保持与其在数据源中完全相同。
相关文章推荐
- 在SQLServer中实现ORACLE的Sequence
- MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能
- sqlserver 中如何实现ORACLE中的ROWNUM功能
- SQLServer 实现oracle中rownum 的功能
- sqlserver实现oracle的sequence方法
- sqlserver下用函数实现 oracle 的树查询( start with connect by ) 功能
- ORACLE中实现类似SQLSERVER中IDENTITY(1,1)序号自增的功能
- sqlserver实现oracle的sequence方法
- MYSQL-实现分组排序 对比 ORACLE 和SQLserver用 row_number() over(partition by ) 分组排序功能
- 在SQLServer中实现ORACLE的Sequence
- sqlserver 与 oracle实现同样功能
- mysql 实现oracle中sequence 功能
- SQLServer实现Oracle的Sequence很简单
- 在 Hibernate 中使用 oracle 的 sequence 产生主键实现 SQL Server 自增长字段功能
- 用锁实现SQLSERVER中并发控制--实现Oracle中select .... for update功能
- Oracle中使用Start With connect by prior实现树功能
- oracle mysql SqlServer 数据库分页实现sql
- sqlserver实现oracle的instr函数(未完)
- Oracle Form开发手电筒查找功能实现
- Sql Server 2005 实现Oracle 10g 的hash表分区功能