自动增量字段是否可能重复?

时间:2015-06-09 06:39:05

标签: sql-server database

我有一个表有几个字段,包括:

  1. contact_id
  2. 电话
  3. phone_id
  4. contact_idphone是主键,phone_id是自动增量字段。我想用它来识别某个条目。所以我想知道在我输入数据时可以复制非主要字段。

2 个答案:

答案 0 :(得分:1)

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

这是一个证据:

override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

    switch kind{

    case UICollectionElementKindSectionHeader:

        let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "HeaderView", forIndexPath: indexPath) as! CollectionViewHeader
        var headerString = westBeaches[indexPath.section] as NSString
        var newSize: CGSize = headerString.sizeWithAttributes([NSFontAttributeName:headerView.headerText.font])
        headerView.frame.size.width = newSize.width + 20
        headerView.layer.cornerRadius = 15
        headerView.headerText.text = westBeaches[indexPath.section]
        headerView.center.x = collectionView.center.x
        headerView.alpha = 0.7
        return headerView

    default:

        assert(false, "Unexpected element Kind")

    }

}

输出:

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

答案 1 :(得分:1)

简短的回答是是的,这是可能的。
SQL Server不会对标识列强制使用唯一约束,这意味着它可以具有重复值,但是,Sql server不会在标识列中生成重复值。

当您向表中插入行时,sql server中的标识列由sql server自身填充。

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

您应该注意以下几点:

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