将nVarChar数据从一个表移动到另一个表并将PK返回到原始表

时间:2014-01-30 21:15:58

标签: sql sql-server sql-server-2008-r2

我正在寻找有关最佳SQL Server 2008 R2方法的建议,以便将相当多的nVarChar数据类型行从一个表移动到另一个表(实际上有许多表)。总之,目标是:

  • chapterOne是一个名为nVarChar
  • page_content列的表格
  • 创建了一个名为RTE的新表格;这是chapterOne.page_content的目标以及其他表中的其他nVarChar数据类型行
  • 第一步是将chapterOne重命名为chapterOneSource,如下所示:

    exec sp_rename 'chapterOne ', 'chapterOneSource'
    
  • 下一步是将外键添加到chapterOneSource,如下所示:

    alter table chapterOneSource add pageContentID int null 
    
  • 现在我想逐行将数据从chapterOne.page_content移到RTE.page_content。移动每一行后,我想获得RTE.ID的主键,并将其放在数据来自的相应chapterOneSource.pageContentID列中。这是我遇到麻烦的部分。

有没有人对使用SQL Server的最佳方法提供建议/帮助?

  • 在移动数据后,我想亲自检查两个表,看看一切是否按预期工作。然后我将删除chapterOne.page_content并创建一个视图。

请注意:我无法更改任务。有一个很好的理由可以解释为什么需要移动高容量nVarChar列,所有这些都是关于过夜同步,其中所有这些类型的列都需要在同一个表中。提前感谢您的时间

1 个答案:

答案 0 :(得分:0)

如果这只是一次动作,我会按以下方式进行。

在你有数据的表中,我会添加一个容纳外键的新列。完成后,将查询写入更新表以生成外键。之后只需获取外键列和数据并将其移动到新表。完成此操作并验证数据是否正确后,您可以从第一个表中删除数据列。我将在明天发布代码如何使用查询完成所有操作。

INSERT INTO ChapterOneSource
SELECT  c.*
    ,ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS MyNewFK
FROM ChapterOne AS c;

INSERT INTO RTE
SELECT c.FK, c.DATA
From ChapterOneSource AS c;

ALTER TABLE ChapterOneSource
DROP COLUMN Data

使用Row_Number()我创建了新的唯一编号,这将成为您未来的FK。这样,您只需将FK移动到PK字段并删除page_content列,而不是尝试确定稍后使用FK更新哪一行。稍后您只需要向RTE表添加数据,使用IDENTITY列生成新的PK,然后将该PK作为FK放入ChapterOneSource