【发布时间】:2012-02-17 04:07:37
【问题描述】:
我有一张用于制作原型的游戏数据表。我在工作时生成数据,但是当我离开并且我的机器进入睡眠状态时,数据生成停止。这导致我的收藏品出现了很大的空白。
我希望能够在表格的 DateTimeCreated 列中移动每个项目的值,以便任何项目与下一个生成的项目之间的间隔不会超过 10 分钟。
表格的结构是这样的:
CREATE TABLE [dbo].[Items](
[Id] [uniqueidentifier] NOT NULL,
[DateTimeCreated] [datetimeoffset](7) NOT NULL,
[AuthorId] [uniqueidentifier] NOT NULL,
[Source] [varchar](max) NOT NULL,
[FullText] [varchar](max) NOT NULL,
CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
我正在考虑在 L2S 中执行此操作,但我有超过 100 万条记录,所以 IDK 如果这是最好的解决方案(迭代每个项目)。我知道在 SQL 中必须有一些方法可以更快地做到这一点。
【问题讨论】:
-
经典的差距和岛屿问题。不要告诉那个人使用光标,不需要。
-
光标 = 撒旦。如果没有人超过我,我今晚会发布一个非光标解决方案
-
@Dems - 我只有 10-15 个间隔,每个间隔约 12 小时。我想保持当前生成数据的日期时间的“随机性”。我从有机来源(随机推文、Facebook 帖子等)中提取数据,所以我想尽可能多地保留有机性。但是,最后,我对任何事情都持开放态度:)
-
@JCooper,谢谢!我期待您的帮助
-
@joe - 您现有的所有 ID 都是连续的吗?或者它们是否由于删除或插入失败而存在间隙?
标签: sql sql-server tsql sql-server-2012 gaps-and-islands