我正在寻找有关最佳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
列,所有这些都是关于过夜同步,其中所有这些类型的列都需要在同一个表中。提前感谢您的时间
答案 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