具有现有ID号的SQL Server Employee表

时间:2018-08-23 03:18:01

标签: sql-server identity

我正在尝试在SQL Server 2016中创建Employee表,并且我想使用EmpID作为主键和身份。我认为这是正确的,也是我的问题:当我创建以EmpID作为主键和Identity(100,1)列的Employee表时,每次添加新员工时,SQL Server都会自动创建EmpID每位新员工增加100,并增加1。如果我想从另一家公司导入现有员工列表,并且这些员工已经拥有现有的EmpID,会发生什么情况?我还无法弄清楚如何使用现有的EmpID导入这些员工。如果可以使用现有的EmpID导入员工列表,SQL Server将检查以确保当前员工不存在新列表中的EmpID吗?还是需要编写一些代码才能实现这一目标?

谢谢!

3 个答案:

答案 0 :(得分:0)

关于主键您是正确的,但是关于从另一家公司导入员工并将其与员工列表合并,您必须提出以下问题:

  1. 为什么?当然有解决此问题的方法,但是为什么要将其他公司员工合并为公司员工?

  2. 其他公司ID结构:大多数时候,公司具有不同的ID结构,一些公司有4个字符,其他公司只有数字,依此类推。但是您必须知道公司ID结构的差异。

如果无法避免合并,那么您必须告知高层人员有关的问题,并且必须告诉他们必须给合并公司新的员工ID。有了这个功能,解决方案就是简单地在数据库中附加新数据。

答案 1 :(得分:0)

这是一个非常正常的数据仓库问题,其中表具有来自多个位置的数据源。还会出现在迁移,收购等方面。

如果有多个具有相同ID的人,则无法将现有ID保留为主键。

在数据仓库世界中,我们将始终创建一个新的代理键,该代理键是表的主键,并且包括原始键和源系统标识符作为两个属性。

在您的方案中,您可能会保留原始公司的现有密钥,为新员工创建新的ID,并将oldID保存在其他列中以供历史使用。

这两个选项中的任何一个都意味着在迁移其他关联数据(例如从旧系统导入的请假信息)时,可以通过在employee表中查找OldID并找到要关联的关联newID,将其转换为新键。在新系统中保存从属记录时使用它。

在一天结束时,别无选择,因为您根本无法让两个雇员拥有相同的主键。

答案 2 :(得分:0)

我从未见过任何公司将员工从另一家公司迁移并保留其现有的员工ID。通常,他们会给他们一个新的ID,并将旧的ID保留在员工文件中以供参考。但是他们从未将旧的ID用作活动ID。

大型公司通常使用系统中已定义的一系列特殊身份来根据领域,专业等区分员工。

大多数公司的业绩与大型公司不同,但它们坚持使用一个标识符,并使用维度作为标识。这些尺寸指定了员工,项目,供应商等的工作领域。因此,它们在全球的系统中都使用过,并受到公司财务报告的影响(这是使用它的重点)。

因此,您需要做的是查看公司ID序列要求,然后在其中发挥自己的作用。由于仅凭身份证明对大多数公司而言还不够。如果看到可以单独依靠身份,则使用它,如果不能,则查看是否可以将维度用作身份(可以创建五个维度-公司,项目,部门,区域,成本中心-这样就足够了对于任何公司)。

如果您仅使用身份并想要迁移,则在插入语句中执行:

SET IDENTITY_INSERT tableName ON
INSRT INTO tableName (columns)
...

这将允许您在身份列内插入,但是,这样做可能需要您将身份重置为新值,以避免出现问题。阅读DBCC CHECKIDENT

如果最终使用尺寸,则可以将尺寸和ID都设为主键,这将确保两者在表中都是唯一的(视为一组)。