【发布时间】:2021-07-23 08:23:00
【问题描述】:
问题
我不能 100% 确定如何在现有表中创建一个可以充当唯一主键的列,并希望验证我的以下方法是否可行,并就可能的更好方法提出建议/建议(如果适用)这样做。
场景
假设我有一个如下所示的现有表 (tbl_employee)
Employee Name Location
------------------------------
John London
Sharath New York
Nivas Mumbai
Praveen Texas
Maharaj Las Vegas
我想在这个表中添加一个列,它可以作为主键,看起来像这样
EmployeeID
-----------
1
2
3
4
5
试过
为表创建一列,将该列指定为主键。不确定这是否会按预期工作?验证/可能的改进建议将不胜感激。
-- Purpose of this is to add an EmployeeID to the existing table (values such as shown above)
-- Set the EmployeeID as the primary key of the table (no primary key already exists)
ALTER TABLE tbl_employee ADD EmployeeID int IDENTITY(1,1) NOT NULL
ADD CONSTRAINT PK_tbl_employee_EmployeeID PRIMARY KEY CLUSTERED (EmployeeID);
【问题讨论】:
-
您是否有任何特定的列可以订购employee_id?
-
您可以在创建表后添加
IDENTITY是的。请记住,分配给每一行的值将是完全任意的。正如您暗示在您的表上没有CLUSTERED INDEX,此时数据存储在无序堆中。 -
哦,好的。是的,我没有实际的列来订购 EmployeeID。这是一个问题吗?您能否创建一个可能进一步解释这一点的答案?我对 SQL 还很陌生。
-
你需要明确你想要什么样的验证(如果有的话)?例如,如果有人尝试添加另一个名为 John 的员工,您是否希望它只是为该行创建一个新的employeeID(即使它可能是现有员工的重复记录),还是因为主键违规而失败?
-
当然,我认为在这种情况下,我希望它只创建一个新的 EmployeeID,但也想知道如果主键违规也会导致失败。我展示的示例是为了便于理解问题而过度简化。也许虽然这导致了歧义。
标签: sql sql-server database