[英]SQL Server 2008 : update the table with primary key
我修改了开发数据库中的表,并希望使用开发服务器中的新数据更新生产数据库中的同一表。 请让我解释一下...
例如,
开发表:
TableName: ParentTable
( ParentID
是自动递增号和主键)
ParentID Name Value
------------------------------
1 Z A-1 (change value to Z)
2 B B-1 (will delete the record completely)
3 C C-1
4 D D-1
5 E E-1
6 F F-1
7 G G-1
8 H H-1
9 I I-1
生产表:
TableName: ParentTable
( ParentID
是自动递增号和主键)
ParentID Name Value
-----------------------------
1 A A-1
2 B B-1
3 C C-1
4 D D-1
5 E E-1
6 F F-1
7 G G-1
8 H H-1
9 I I-1
首先,请注意ParentID
是自动增量号,也是主键。 ParentTable
与其他人之间也存在关系。
在DEV服务器上,我将parentID# 1
名称从“ A”更改为“ Z”,并且还删除了parentID# 2
的记录。
由于已在DEV服务器上删除了parentID# 2
记录,因此假设我将从与生产服务器上与ParentID# 2
关联的其他表中删除所有记录。
什么是在生产环境上更新与DEV服务器上的ParentTable
完全相同的生产中更新ParentTable
的好方法?
提前致谢
我可能会尝试类似:
declare @parentOffset int
begin transaction
select @parentOffset = max(ParentID) from Prod.dbo.ParentTable (holdlock)
set identity_insert Prod.dbo.ParentTable on
insert into Prod.dbo.ParentTable ( ParentID , Name , Value )
select Dev.dbo.ParentTable.ParentID + @parentOffset , Dev.dbo.ParentTable.Name , Dev.dbo.ParentTable.Value
from Dev.dbo.ParentTable.ParentTable
set identity_insert Prod.dbo.ParentTable off
insert into Prod.dbo.ChildTable ( ParentID , SomeOtherField )
select Dev.dbo.ChildTable.ParentID + @parentOffset , Dev.dbo.ChildTable.SomeOtherField
commit transaction
显然,在您将触发器拖入生产环境之前,先对它的离线副本进行测试,并进行一些错误处理,但这应该可以完成工作。 它不会测试表中是否已经存在值,但是您可以稍作修改并通过临时表来处理它。 目前尚不清楚这是您的情况,还是只想添加。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.