如何将数据插入到许多表中

时间:2017-06-15 16:08:33

标签: sql sql-insert

例如,我有一张3桌

Table name: Role
table Attributes: roleid (pk), rolename

用户一对多的角色

Table name: user
table Attributes: roleid (fk), userid(pk), trackingid(fk) username, password, email

用户一对一

Table name: tracking
table Attributes: trackingid(pk) approvalstatus*, status, createdby, createdDate(yyyy-mm-dd). 

*属性的含义 审批状态 - 管理员将批准任何更改,以便可以等待,批准或拒绝

状态是指示更改请求是新用户/编辑还是删除用户。

如何插入语句以插入新用户以进行审批。因为,当您在数据库中插入数据时应该如下所示

+----------+----------+--------------------+----------+--------+----------------+-----------+-------------+
| username | password |       email        | rolename | status | approvalstatus | createdby | createdDate |
+----------+----------+--------------------+----------+--------+----------------+-----------+-------------+
| harry    | password | harry@yahoo.com.sg | Admin    | New    | Pending        | Barry     | 2016-09-20  |
+----------+----------+--------------------+----------+--------+----------------+-----------+-------------+

1 个答案:

答案 0 :(得分:-1)

这实际上取决于您与数据库的交互方式。

如果你正在使用像Entity Framework或NHibernate这样的ORM,那么这取决于你如何映射表格,这是开箱即用的。

有关此信息,请查看:

  1. Entity Framework
  2. NHibernate
  3. 如果您直接对SQL Server执行此操作,则可以使用以下命令:

    1. 存储过程 - 在这种情况下,您将在数据库服务器上调用单个存储过程,它将根据您的输入为您执行三次插入。
    2. 您可以使用单个连接对数据库执行3次操作。
    3. 无论您是否选择了存储过程。或者手工声明你的插页看起来像:

      INSERT INTO ROLE (RoleID, RoleName) VALUES (newID(), 'Your Role Name'); --If you have auto increment on your PK you can ignore inserting into RoleID. Most Systems I work with now use GUID's for ID's so this is just an example.
      
      INSERT INTO User (RoleID, UserID, TrackingID, UserName, Password, Email) Values (....)
      
      INSERT INTO Tracking (TrackingID, ApprovalStatus, Status, CreatedBy, CreatedDate) values (....)
      

      在您的数据库中有条目后,您可以使用以下命令更新:

      UPDATE Tracking SET ApprovalStatus = 'whatever you want here' where id = X
      

      如果您需要维护跟踪历史记录,而不是更新跟踪记录,则需要插入新行,并始终确保在您选择数据时,您会获得基于日期时间戳。

      您的问题中的表格具有误导性。您正在加入三个表来获取这些结果,这可能是您想要的输出结果。