【问题标题】:How to store table rows in a temp table如何在临时表中存储表行
【发布时间】:2015-03-08 15:35:24
【问题描述】:

我有一个包含大约 600000 条记录的表。我想重新设定该表的标识列。这是我的计划:

  1. 将此表的内容存储在临时表中
  2. 从该表中删除所有记录
  3. 种子身份
  4. 将该临时表中的记录插入此表中

那么如何将这个表存储到一个临时表中呢?

【问题讨论】:

  • 为什么不直接从 600001 删除身份、更新 ID 和重新播种?
  • 如果您想通过删除所有内容来做到这一点,您可以使用 SELECT ... INTO 子句使用现有数据填充新表。
  • @GiorgiNakeuri 我使用 int 作为标识,并且已达到其限制,因为在此表中插入记录的作业会不断删除旧记录并插入新记录。由于我们将此表从 Dev 移至 Production,因此身份已经非常高,因为在测试期间不断删除和插入。

标签: sql-server-2012 identity temp-tables


【解决方案1】:

如果幕后没有其他东西,那么试试这个:

SET IDENTITY_INSERT TABLE_NAME ON
GO

UPDATE  CTE
SET     ID = RN
FROM
(
    SELECT  ID, ROW_NUMBER() OVER(ORDER BY ID) AS RN
    FROM    TABLE_NAME
) AS CTE

SET IDENTITY_INSERT TABLE_NAME OFF
GO

DBCC CHECKIDENT('TABLE_NAME', RESEED, 600001)
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多