identity明白了,但是我那个设了identity后,好象数据插不进去,是不是给关了,如果是的话,怎么设置打开呢. ------------------------- 如果你设了identity以后,它是自动编号的,不用插入数据了如 create table t ( id int identity(1,1), name varchar(10) )insert into t select 'zhang' union all select 'hong'即可,select * from t时 就有两条记录,id 为 1,2
identity 自动增加CLUSTERED 为族索引,通常定为identity的字段,会用来创建族索引
不过那个CLUSTERED还是不太清楚,能举个例子吗
-------------------------
如果你设了identity以后,它是自动编号的,不用插入数据了如
create table t
(
id int identity(1,1),
name varchar(10)
)insert into t
select 'zhang' union all
select 'hong'即可,select * from t时
就有两条记录,id 为 1,2
identity列不用手动插入,如果要,设置identity_insert
而unclustered就不会,构建索引后记录不变.
unclustered构建设索引时快,以后使用时不如clustered的索引速度快.
当有大量的行正在被插入表中时,要避免在本表一个自然增长(例如,identity列)的列上建立镞索引。如果你建立了镞的索引,那么insert的性能就会大大降低。因为每一个插入的行必须到表的最后,表的最后一个数据页
聚集索引一般是 建立在你最需要查询排序的那几列上
identity 列 建个非聚集索引就可以了
只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。语法
IDENTITY ( data_type [ , seed , increment ] ) AS column_name参数
data_type标识列的数据类型。标识列的有效数据类型可以是任何整数数据类型分类的数据类型(bit 数据类型除外),也可以是 decimal 数据类型。seed要指派给表中第一行的值。给每一个后续行指派下一个标识值,该值等于上一个 IDENTITY 值加上 increment 值。如果既没有指定 seed,也没有指定 increment,那么它们都默认为 1。increment用来添加到 seed 值以获得表中连续行的增量。column_name将插入到新表中的列的名称。 返回类型
返回与 data_type 相同的类型。注释
因为该函数在表中创建一个列,所以必须用下列方式中的一种在选择列表中指定该列的名称:--(1)
SELECT IDENTITY(int, 1,1) AS ID_Num
INTO NewTable
FROM OldTable--(2)
SELECT ID_Num = IDENTITY(int, 1, 1)
INTO NewTable
FROM OldTable示例
下面的示例将来自 pubs 数据库中 employee 表的所有行都插入到名为 employees 的新表。使用 IDENTITY 函数在 employees 表中从 100 而不是 1 开始编标识号。USE pubs
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'employees')
DROP TABLE employees
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'SELECT emp_id AS emp_num,
fname AS first,
minit AS middle,
lname AS last,
IDENTITY(smallint, 100, 1) AS job_num,
job_lvl AS job_level,
pub_id,
hire_date
INTO employees
FROM employee
GO
USE pubs
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'具体的你自己去查联机丛书吧