2015-06-09 58 views
2

我有哪几种领域包括表格:是否有可能是一个自动增量字段重复?

  1. CONTACT_ID
  2. 电话
  3. phone_id

contact_idphone的主键和phone_id是一个自动增量字段。我想用它来识别某个条目。所以我想知道,当我输入数据时,有可能复制那个非主字段。

+0

如果你运行'SET IDENTITY_INSERT yourTable ON',你可以。否则,你不能。 –

回答

1

除非没有约束,某些唯一索引,您可以在该列中重复值,因为1)您可以打开identity_insert,2)您可以重新设定增量。

这里就是一个证明:

CREATE TABLE #test(id INT IDENTITY(1, 1)) 

INSERT INTO #test DEFAULT VALUES 
INSERT INTO #test DEFAULT VALUES 
INSERT INTO #test DEFAULT VALUES 

SET IDENTITY_INSERT #test ON 

INSERT INTO #test(id) VALUES(1) 

SET IDENTITY_INSERT #test OFF 

INSERT INTO #test DEFAULT VALUES 
INSERT INTO #test DEFAULT VALUES 

DBCC CHECKIDENT ('#test', RESEED, 1); 

INSERT INTO #test DEFAULT VALUES 
INSERT INTO #test DEFAULT VALUES 

SELECT * FROM #test 

DROP TABLE #test 

输出:

id 
1 
2 
3 
1 
4 
5 
2 
3 
1

简短的回答是是的,这是可能的。
SQL Server不强制标识列的唯一约束,这意味着可以有重复的值,但是,Sql服务器不会在标识列中生成重复值本身。

在向表中插入一行时,sql server中的标识列由sql server本身填充。

但是,您可以在插入语句之前使用SET IDENTITY_INSERT来指定值。

有一对夫妇的事情,你应该知道的:

  1. 上为每个表设置IDENTITY_INSERT。你只能在一张桌子上设置它。
  2. 在您将identity_insert设置为关闭之前,对该表的任何插入语句都必须指定标识列的值。
  3. 对于单个会话中的多个表,您无法使用set identity insert on。因此,在向表中插入记录后,必须在该表上设置identity_insert。
相关问题