Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 尝试在具有数据和现有数据操作的现有表中添加一个新列作为外键_Sql Server_Database_Api_Database Design_Database Schema - Fatal编程技术网

Sql server 尝试在具有数据和现有数据操作的现有表中添加一个新列作为外键

Sql server 尝试在具有数据和现有数据操作的现有表中添加一个新列作为外键,sql-server,database,api,database-design,database-schema,Sql Server,Database,Api,Database Design,Database Schema,一个非常简单的例子。我有一个web API,数据库中有一个表 Employees --------- Id --------- Name 例如,我有50张唱片 现在我必须实现一个功能来添加有关部门的额外信息。因为我有一对多的关系,所以新的数据库模式是带有部门id的 Employees Department ---------- ----------- Id Id --------- -----------

一个非常简单的例子。我有一个web API,数据库中有一个表

Employees
---------
Id
---------
Name
例如,我有50张唱片

现在我必须实现一个功能来添加有关部门的额外信息。因为我有一对多的关系,所以新的数据库模式是带有部门id的

Employees           Department
----------         -----------
Id                  Id
---------           -----------
Name                Name
--------- 
DepartmentId
为此,我运行查询(我使用SQL server)

但现在我有一些问题要处理

1) 现在我有50条没有部门ID的现有记录。但是,我必须手动添加此值吗?最佳做法是什么?对于50条记录,这是可能的,但对于2000条或更多的记录

2) 当我添加departmentId列时,我将该列设置为空值(是否正确?),但作为外键,我不希望允许空值。我可以改变它吗?或者我如何处理它

1) 现在我有50条没有部门ID的现有记录。但是,我必须手动添加此值吗?最佳做法是什么?对于50条记录,这是可能的,但对于2000条或更多的记录

视情况而定。您可以为“未分配”设置一个新部门,并将其全部分配给该部门;您可以向人力资源部发送一份电子表格,说明“以下员工没有指定的部门;他们在哪个部门?ps;在发回表格之前,不要从表格中删除EmployeeID列;我需要它来更新DB”。这在很大程度上是一个商业背景问题,而不是一个技术问题。X千条记录很容易处理。。如果你(或其他人)是手工操作的,只需要花一点时间就可以完成。该信息可能在其他地方获得;您可以向所有部门负责人发送一份清单,说明“这些人中有人是您的吗?请从该电子表格中删除您团队中没有的所有姓名,并将其发送给我”,然后根据您得到的信息更新数据库

由于这是一次操作,您不需要任何特别出色的东西-您只需将Excel工作表取回,并在一个空列中放入:

="UPDATE emp SET departmentID = 5 WHERE id = " & A1
并填充它以生成一组更新语句,将文本复制到您的查询工具中并点击go;不需要将工作表加载到表中,执行更新连接等,只需在excel中以黑客风格将一些东西组合起来,即可为您编写SQL,复制/粘贴/运行。如果人力资源部已发回包含部门名称列表的工作表,则将部门名称和id放在工作表的其他位置,并使用或将名称转换为部门编号,然后根据该名称编写SQL

2) 当我添加departmentId列时,我将该列设置为空值(是否正确?),但作为外键,我不希望允许空值。我可以改变它吗?或者我如何处理它

外键列允许有空值-施加“无空”限制的不是FK,而是列的可空性(将列更改为
departmantid INT NOT NULL
)施加了该限制。FK引用主键,并且主键可能不为null(或者在某些DB中,最多一条记录可以有[部分]null PK),但您可以将这些记录保留为null。如果确实将列更改为NOTNULL,则需要首先更正null值,否则更改将失败

="UPDATE emp SET departmentID = 5 WHERE id = " & A1