jch*_*apa 5 sql sql-server data-migration
我正在使用SQL Server 2005.
我正在将数据从当前数据库(单个表)迁移到新数据库(规范化 - 许多表).在新数据库中,我有一个基表(我们称之为"BaseTable"),以及其他多个表(让我们调用它们"DependentA",和"DependentB").旧数据库中的一些数据将转到BaseTable,而另一些将转到另外两个.BaseTable与DependentA和DependentB都有一对一的关系,使用它们的Id作为外键.
所以这是我的问题.我应该如何迁移数据?这是我一直在尝试的一个查询,除了一件事之外它是有效的:BaseTable中的其他两个外键是相同的,而不是每个都有不同的.
Begin SQL:
BEGIN TRANSACTION
DECLARE @dep1Id int
DECLARE @dep2Id int
INSERT INTO DependentA (column1, column2)
SELECT c1, c2
FROM OldDatabase.OldTable
SELECT @dep1Id = Scope_Identity()
INSERT INTO DependentB (column3, column4)
SELECT c3, c4
FROM OldDatabase.OldTable
SELECT @dep2Id = Scope_Identity()
INSERT INTO BaseTable (column5, dependentTable1Id, dependentTablr2Id)
SELECT c5, @dep1Id, @dep2Id
FROM OldDatabase.OldTable
COMMIT
Run Code Online (Sandbox Code Playgroud)
问题是@ dep1Id和@ dep1Id是标量,只保留两个基于集合的插入的最后一个值.
因为它是一次性的,你应该把它作为光标
DECLARE CURSOR @curs FOR
SELECT c1,c2,c3,c4,c5 FROM OldDatebase
open @curs
fetch next from @curs into
@c1,@c2,@c3,@c4,@c5 --declare these!
while @@fetch_status <> 0
BEGIN
INSERT INTO DependentA (column1, column2) VALUES @c1, @c2
SELECT @dep1Id = Scope_Identity()
INSERT INTO DependentB (column3, column4) VALUES @c3, @c4
SELECT @dep2Id = Scope_Identity()
INSERT INTO BaseTable (column5, department1Id, department2Id) @c5, @dep1Id, @dep2Id
fetch next from @curs into
@c1,@c2,@c3,@c4,@c5
END
close @curs
deallocate @curs
Run Code Online (Sandbox Code Playgroud)
我的游标语法可能有很多错误,但你明白了.