MSSQL将行插入到关系表中。

MSSQL将行插入到关系表中。,sql,sql-server,relational-database,Sql,Sql Server,Relational Database,我有两张桌子个人和电话。许多电话号码可以通过外键与一个人关联。如果我想添加一个电话号码并将其映射到特定的人,我的SQL应该是什么样子的 据我理解: SQL语句应该是transact,因此首先我必须在person表中插入person,然后在Phones中插入电话号码,并将其映射到person表中刚刚插入的行 如果行已存在于另一个表中,该怎么办?我该怎么处理 我正在寻找一个干净简单的解决方案或sql示例 注意:我没有创建存储过程的权限 如果你要用新的手机插入一个新的人,那么你会 插入到Person表

我有两张桌子<代码>个人和电话。许多电话号码可以通过外键与一个人关联。如果我想添加一个电话号码并将其映射到特定的人,我的SQL应该是什么样子的

据我理解:

  • SQL语句应该是transact,因此首先我必须在
    person
    表中插入person,然后在
    Phones
    中插入电话号码,并将其映射到
    person
    表中刚刚插入的行

  • 如果行已存在于另一个表中,该怎么办?我该怎么处理

  • 我正在寻找一个干净简单的解决方案或sql示例


    注意:我没有创建存储过程的权限

    如果你要用新的
    手机插入一个新的
    ,那么你会

  • 插入到
    Person
    表中
  • 用于获取插入时刚刚生成的ID
  • 使用该ID将记录插入
    电话

  • 如果您正在为现有的
    人员插入新的
    手机
    ,则您会

  • 选择
    人员
    以获取其ID(如果您还没有)

  • 使用该ID将记录插入
    电话

    如果行已存在于另一个表中,该怎么办?我该怎么处理

  • 在此上下文中定义“已存在”。什么定义了数据的唯一性?在这种情况下,您可能需要考虑将唯一性定义合并到该表中的主键中。(可以由多个列组成)否则您必须从表中选择
    ,以查看该行是否已经存在。如果有,请更新它。如果没有,请插入它。(或者,您希望以逻辑方式处理域中已有的数据。)

    请记住,在这种情况下,很容易过分追求独特性。例如,您可能会尝试在这些表之间创建多对多关系,以避免电话号码重复。在现实世界中,这最终是一个坏主意,因为有可能:

  • 两个人共用一个电话号码
  • 这两个人中的一个改变了他/她的号码,但另一个没有
  • 在过度规范化的场景中,上述事件将导致以下情况之一:

  • 两个用户的电话号码都会在只有一个用户实际更新时更新,从而导致另一个用户的数据不正确
  • 您必须编写过于复杂的代码来检查此场景并创建新记录(解除以前多对多关系的关联),从而导致大量不必要的代码和故障点

  • 如果您要用新的
    手机插入一个新的
    ,那么您会

  • 插入到
    Person
    表中
  • 用于获取插入时刚刚生成的ID
  • 使用该ID将记录插入
    电话

  • 如果您正在为现有的
    人员插入新的
    手机
    ,则您会

  • 选择
    人员
    以获取其ID(如果您还没有)

  • 使用该ID将记录插入
    电话

    如果行已存在于另一个表中,该怎么办?我该怎么处理

  • 在此上下文中定义“已存在”。什么定义了数据的唯一性?在这种情况下,您可能需要考虑将唯一性定义合并到该表中的主键中。(可以由多个列组成)否则您必须从表中选择
    ,以查看该行是否已经存在。如果有,请更新它。如果没有,请插入它。(或者,您希望以逻辑方式处理域中已有的数据。)

    请记住,在这种情况下,很容易过分追求独特性。例如,您可能会尝试在这些表之间创建多对多关系,以避免电话号码重复。在现实世界中,这最终是一个坏主意,因为有可能:

  • 两个人共用一个电话号码
  • 这两个人中的一个改变了他/她的号码,但另一个没有
  • 在过度规范化的场景中,上述事件将导致以下情况之一:

  • 两个用户的电话号码都会在只有一个用户实际更新时更新,从而导致另一个用户的数据不正确
  • 您必须编写过于复杂的代码来检查此场景并创建新记录(解除以前多对多关系的关联),从而导致大量不必要的代码和故障点

  • 如果无法创建存储过程,则需要列出“客户端软件”。DotNet、PHP、Java等。如果无法创建存储过程,则需要列出“客户端软件”。DotNet、PHP、Java等。