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 给插入表中的每个新行指派一个值,该值比前面的最高值要大出某些增量。但是,如果新行是由另一个数据源复制过来的,那么标识值必须保持与其在数据源中完全相同。示例 A. 将 IDENTITY 属性与 CREATE TABLE 一起使用 下面的示例创建一个新表,该表将 IDENTITY 属性用于获得自动增加的标识号。USE pubs IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'new_employees') DROP TABLE new_employees GO CREATE TABLE new_employees ( id_num int IDENTITY(1,1), fname varchar (20), minit char(1), lname varchar(30) )INSERT new_employees (fname, minit, lname) VALUES ('Karin', 'F', 'Josephs')INSERT new_employees (fname, minit, lname) VALUES ('Pirkko', 'O', 'Koskitalo')
建表时可用:create table tablename(id int identity(1,1),name varchar(10)) ----------------------------------------------------------------------如果需要删除数据后ID仍按顺序的可参考: --删除记录后ID的自动变化 ---------------------------------函数 create function emp_getid() returns int as begin declare @id int select @id=max(id) from emp set @id=isnull(@id,0)+1 return(@id) end--表 CREATE TABLE [dbo].[emp] ( [id] [int] NOT NULL , a varchar(10) ) ON [PRIMARY] GOALTER TABLE [dbo].[emp] WITH NOCHECK ADD CONSTRAINT [PK_emp] PRIMARY KEY CLUSTERED ( [id] ) ON [PRIMARY] GOALTER TABLE [dbo].[emp] WITH NOCHECK ADD CONSTRAINT [DF__emp__id__208CD6FA] DEFAULT ([dbo].[emp_getid]()) FOR [id] GO --触发器 create trigger emp_delete on dbo.emp AFTER delete as declare @id int,@mid int select @mid=min(id),@id=@mid-1 from deleted update emp set id=@id,@id=@id+1 where id>@mid--测试数据 insert emp (a) select '10' union all select '20' union all select '30'delete emp where id =2select * from empdrop table emp drop function emp_getid/* id a ----------- 1 10 2 30*/
你能具体解释一下吗?
如果我的表是手工建的,自己选择数据类型,identity(1,1)是不是可以选择啊?对不起,向你问这么菜的问题!
你的qq是多少?
以后有什么问题直接向您请教!
我的qq:63194627
谢谢!
在表中创建一个标识列。该属性与 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 给插入表中的每个新行指派一个值,该值比前面的最高值要大出某些增量。但是,如果新行是由另一个数据源复制过来的,那么标识值必须保持与其在数据源中完全相同。示例
A. 将 IDENTITY 属性与 CREATE TABLE 一起使用
下面的示例创建一个新表,该表将 IDENTITY 属性用于获得自动增加的标识号。USE pubs
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'new_employees')
DROP TABLE new_employees
GO
CREATE TABLE new_employees
(
id_num int IDENTITY(1,1),
fname varchar (20),
minit char(1),
lname varchar(30)
)INSERT new_employees
(fname, minit, lname)
VALUES
('Karin', 'F', 'Josephs')INSERT new_employees
(fname, minit, lname)
VALUES
('Pirkko', 'O', 'Koskitalo')
----------------------------------------------------------------------如果需要删除数据后ID仍按顺序的可参考:
--删除记录后ID的自动变化
---------------------------------函数
create function emp_getid()
returns int
as
begin
declare @id int
select @id=max(id) from emp
set @id=isnull(@id,0)+1
return(@id)
end--表
CREATE TABLE [dbo].[emp] (
[id] [int] NOT NULL ,
a varchar(10)
) ON [PRIMARY]
GOALTER TABLE [dbo].[emp] WITH NOCHECK ADD
CONSTRAINT [PK_emp] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GOALTER TABLE [dbo].[emp] WITH NOCHECK ADD
CONSTRAINT [DF__emp__id__208CD6FA] DEFAULT ([dbo].[emp_getid]()) FOR [id]
GO
--触发器
create trigger emp_delete on dbo.emp
AFTER delete
as
declare @id int,@mid int
select @mid=min(id),@id=@mid-1 from deleted
update emp set id=@id,@id=@id+1 where id>@mid--测试数据
insert emp (a)
select '10'
union all select '20'
union all select '30'delete emp where id =2select * from empdrop table emp
drop function emp_getid/*
id a
-----------
1 10
2 30*/
谢谢!
一定会重分感谢!