我听说过做临时表,我想知道你是怎么做到的。
我想在临时表中执行SqlBulkCopy。然后更新真实表。
我在SQL Server 2008中听说你可以使用一些名为merge的东西,但我使用的是SQL Server 2005,所以我听说我必须使用更新内连接?
我不确定它会是什么样子(我猜最好的方法是在SP中写它)。此外,临时表还需要能够处理并发更新。
我正在考虑将另一列作为GUID放入暂存状态,以便我知道哪些记录属于哪个组,何时从分段表中删除记录,我可以使用它。
那么有人能告诉我任何关于如何做的例子或教程吗?这种方式有多快?假如你的更新50,000记录了需要多长时间(猜测很好)
修改
所以现在这是我的SP。我认为它应该能够并发连接,但我想确保。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_MassUpdate]
@BatchNumber uniqueidentifier
AS
BEGIN
update Product
set ProductQty = 50
from Product prod
join StagingTbl stage on prod.ProductId = stage.ProductId
where stage.BatchNumber = @BatchNumber
DELETE FROM StagingTbl
WHERE BatchNumber = @BatchNumber
END
答案 0 :(得分:2)
您创建临时表的方式与创建常规表的方式相同。使用CREATE TABLE脚本定义列和数据类型。
行
update prod
set field1 = stage.field1
from myproductiontable prod
join mystagingtable stage on prod.somefield = stage.somefield
添加不在prod中的记录
Insert myproductiontable (f1, f2, f3)
select stage.f1, stage.f2, stage.f3
from mystagingtable stage
where not exists (select someid from myproductiontable prod WHERE stage.somefield = prod.somefield)
但是,您必须在登台表中有一个或多个与prod表中的记录相关的字段。有时您必须进行额外的联接才能获得这种关系。