我正在使用SQL Server 2005。
我正在将数据从当前数据库(单个表)迁移到新数据库(规范化-许多表)。在新数据库中,我有一个基表(我们称它为“ BaseTable”)和多个其他表(我们称它们为"DependentA"和"DependentB")。来自旧数据库的某些数据将转到BaseTable,而另一些将转到其他两个。BaseTable与DependentA和DependentB都具有一对一关系,使用它们的ID作为外键。
"DependentA"
"DependentB"
所以这是我的问题。我应该如何迁移数据?这是我一直在尝试的查询,除了一件事之外,它一直在工作: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
问题在于@ 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
我的光标语法可能充满了错误,但是您明白了。