首页 > 解决方案 > 仅具有读取权限时按 asc 顺序创建 PK

问题描述

我正在查询的 SQL 表最近发生了更改,它删除了 ID 列。ID 列基本上是从输入日期开始的自动编号。我在提取数据时使用了很多我的软件查询,所以这些显然需要更新。

但是我只有对该表的读取权限。有没有办法在我的查询中创建一个可以做到这一点的列?现在在我的查询中唯一可区分的列是我的日期/时间列。我的日期时间列的示例是“2020-03-03 10:17:26.0000000”(年-月-日)

所以我想我可以使用这个日期/时间列并创建一个整数,然后我可以将其用作我的新 ID?我不能单独使用日期/时间列,因为它说“从字符串转换日期和/或时间时转换失败。”

任何想法都会很棒。

谢谢

标签: sqldatetimeprimary-keyuniqueidentifier

解决方案


您可以使用row_number()

select t.*,
       row_number() over (partition by datetime_col) as imputed_id
from t;

请注意,这可能不完全等同于删除的 id,但它会根据日期/时间列枚举行。如果存在平局(即完全相同的值),那么它们的顺序可能会从一个运行变为另一个运行。


推荐阅读