sql-server - 具有现有 ID 号的 SQL Server Employee 表
问题描述
我正在尝试在 SQL Server 2016 中创建一个 Employee 表,并且我想使用 EmpID 作为主键和标识。这是我认为正确的和我的问题:当我创建以 EmpID 作为主键和 Identity(100, 1) 列的 Employee 表时,每次添加新员工时,SQL Server 都会自动创建 EmpID每增加 100 名员工,每增加 1 名员工。如果我想从另一家公司导入现有员工列表并且这些员工已经拥有现有 EmpID,会发生什么情况?我无法弄清楚如何使用现有的 EmpID 导入这些员工。如果有办法使用现有 EmpID 导入员工列表,SQL Server 将检查以确保 EmpID' 当前员工不存在新列表中的 s?还是我需要编写一些代码才能实现这一点?
谢谢!
解决方案
我从未见过任何公司从另一家公司迁移员工并保留他们现有的员工ID。通常,他们会给他们一个新 ID,并将旧 ID 保留在员工档案中以供参考使用。但他们从来没有将旧的用作活动 ID。
大公司通常使用系统中已经定义的一系列特殊身份来根据领域、专业等来区分员工。
大多数公司不像大公司那样做,而是坚持使用一个标识符,并使用维度作为标识。这些维度指定了员工、项目、供应商等的工作领域。因此,它们在全球系统中使用,并影响公司财务报告(这是使用它的要点)。
因此,您需要做的是查看公司 ID 序列要求,然后发挥您的作用。因为对于大多数公司来说,仅仅依靠 IDENTITY 是不够的。如果你看到你可以单独依赖身份,那么就使用它,如果不能,那么看看你是否可以使用维度作为身份(你可以创建五个维度 - 公司,项目,部门,区域,成本中心 - 就足够了适用于任何公司)。
如果您单独使用身份,并且想要迁移,那么在您的插入语句中执行:
SET IDENTITY_INSERT tableName ON
INSRT INTO tableName (columns)
...
这将允许您在标识列中插入,但是,这样做可能需要您将标识重置为新值,以避免出现问题。读取DBCC CHECKIDENT
如果您最终使用维度,您可以将维度和 ID 作为主键,这将确保两者在表中都是唯一的(视为一组)。
推荐阅读
- python - 有没有办法在我的红绿灯代码下方添加一个计数器?
- javascript - 在 javascript/jQuery 中的 N 个异步调用后执行一个函数
- jax-rs - 使用 Enunciate 进行 Swagger 注释
- docker - 在哪里最好将代理设置配置为从 docker 容器内部“pip install”
- java - 如何将下拉列表中所选选项的值分配给jsp中的变量?
- python - 将分配分成两行仍然同样有效吗?
- c# - 如何将一张表用于两个不同域中的两个不同上下文?
- bash - 如何编写 bash 脚本来计算积分?
- azure - 如何将 azure 事件中心的消息限制大小从 1 MB 增加到发送 4 MB?
- python - 熊猫:使用 minrank 在 groupby 之后排名