【问题标题】:How to delete a row where a timestamp is part of the composite primary key?如何删除时间戳是复合主键一部分的行?
【发布时间】:2014-07-25 04:53:57
【问题描述】:

我有一个记录每次收取费用的表格。复合键由以下部分组成:
- 时间戳
- 银行号码
- 分行号码
- 操作员编号
- 钱箱号码

最后四个并不总是单独唯一标识。 (这就是时间戳在那里的原因。)

退还费用时,我想从数据库中删除该行。我该怎么做呢?

【问题讨论】:

  • 你为什么不简单地使用时间戳来选择要删除的记录呢?这些时间戳是唯一的吗?
  • 保存后如何将时间戳降低到毫秒?时间戳是唯一的:YYYY-MM-DD HH:MM:SS.MSS
  • 可以在表格中添加唯一标识字段吗?
  • 那将需要更改数据库,这超出了我的权限级别。

标签: database sql-server-2008 composite-key delete-row


【解决方案1】:

主键或构成主键的列组成一个唯一集。使用主键/复合列删除记录。

Delete
FROM <Table Name>
Where Timestamp = @Timestamp
AND [Bank Number] = @BranchNumber
AND [Branch Number] = @[BranchNumber
AND [Operator Number] = @OperatorNumber
AND [Cashbox Number] = @CashboxNumber

另一种选择: 用两列附加表格 退还小号 已删除或不活动的 smallint

与其实际删除记录,不如让它们知道您已收到并且记录处于非活动状态。通过这种方式,您可以在 1 个表中进行跟踪,而无需执行大量连接来获取随时间推移发生的事件的完整历史记录。 - 只是一个想法。

【讨论】:

  • 对,我知道怎么写删除查询。我很好奇如何在不添加代理键的情况下获得该时间戳。那将需要更改数据库。 Edit:我们已经讨论了添加反转标志的选项,但是我上面的人希望它被删除。
  • 不确定我是否完全理解这个问题:您想在不使用代理键的情况下获取时间戳。您在隔离要删除的记录时遇到困难吗?当您获得退款时,您是否有足够的数据属性可以使用,以便您可以在您提到的表格中隔离记录?
  • 我还想添加一个时间戳,实际上与日期时间没有任何关系。它是连续数字的二进制表示。在这里阅读一些好的细节:stackoverflow.com/questions/8119386/…
猜你喜欢
  • 2011-10-04
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
相关资源
最近更新 更多