MSSQL将行插入到关系表中。
我有两张桌子<代码>个人和电话。许多电话号码可以通过外键与一个人关联。如果我想添加一个电话号码并将其映射到特定的人,我的SQL应该是什么样子的 据我理解:MSSQL将行插入到关系表中。,sql,sql-server,relational-database,Sql,Sql Server,Relational Database,我有两张桌子个人和电话。许多电话号码可以通过外键与一个人关联。如果我想添加一个电话号码并将其映射到特定的人,我的SQL应该是什么样子的 据我理解: SQL语句应该是transact,因此首先我必须在person表中插入person,然后在Phones中插入电话号码,并将其映射到person表中刚刚插入的行 如果行已存在于另一个表中,该怎么办?我该怎么处理 我正在寻找一个干净简单的解决方案或sql示例 注意:我没有创建存储过程的权限 如果你要用新的手机插入一个新的人,那么你会 插入到Person表
person
表中插入person,然后在Phones
中插入电话号码,并将其映射到person
表中刚刚插入的行注意:我没有创建存储过程的权限 如果你要用新的
手机插入一个新的人
,那么你会
插入到Person
表中
用于获取插入时刚刚生成的ID
使用该ID将记录插入电话
表
如果您正在为现有的人员插入新的手机
,则您会
选择人员
以获取其ID(如果您还没有)
使用该ID将记录插入电话
表
如果行已存在于另一个表中,该怎么办?我该怎么处理
在此上下文中定义“已存在”。什么定义了数据的唯一性?在这种情况下,您可能需要考虑将唯一性定义合并到该表中的主键中。(可以由多个列组成)否则您必须从表中选择,以查看该行是否已经存在。如果有,请更新它。如果没有,请插入它。(或者,您希望以逻辑方式处理域中已有的数据。)
请记住,在这种情况下,很容易过分追求独特性。例如,您可能会尝试在这些表之间创建多对多关系,以避免电话号码重复。在现实世界中,这最终是一个坏主意,因为有可能:
两个人共用一个电话号码
这两个人中的一个改变了他/她的号码,但另一个没有
在过度规范化的场景中,上述事件将导致以下情况之一:
两个用户的电话号码都会在只有一个用户实际更新时更新,从而导致另一个用户的数据不正确
您必须编写过于复杂的代码来检查此场景并创建新记录(解除以前多对多关系的关联),从而导致大量不必要的代码和故障点
如果您要用新的手机插入一个新的人
,那么您会
插入到Person
表中
用于获取插入时刚刚生成的ID
使用该ID将记录插入电话
表
如果您正在为现有的人员插入新的手机
,则您会
选择人员
以获取其ID(如果您还没有)
使用该ID将记录插入电话
表
如果行已存在于另一个表中,该怎么办?我该怎么处理
在此上下文中定义“已存在”。什么定义了数据的唯一性?在这种情况下,您可能需要考虑将唯一性定义合并到该表中的主键中。(可以由多个列组成)否则您必须从表中选择,以查看该行是否已经存在。如果有,请更新它。如果没有,请插入它。(或者,您希望以逻辑方式处理域中已有的数据。)
请记住,在这种情况下,很容易过分追求独特性。例如,您可能会尝试在这些表之间创建多对多关系,以避免电话号码重复。在现实世界中,这最终是一个坏主意,因为有可能:
两个人共用一个电话号码
这两个人中的一个改变了他/她的号码,但另一个没有
在过度规范化的场景中,上述事件将导致以下情况之一:
两个用户的电话号码都会在只有一个用户实际更新时更新,从而导致另一个用户的数据不正确
您必须编写过于复杂的代码来检查此场景并创建新记录(解除以前多对多关系的关联),从而导致大量不必要的代码和故障点
如果无法创建存储过程,则需要列出“客户端软件”。DotNet、PHP、Java等。如果无法创建存储过程,则需要列出“客户端软件”。DotNet、PHP、Java等。