如何在SQL Server 2005中创建临时表?

时间:2010-05-25 21:27:14

标签: c# sql-server sql-server-2005

我听说过做临时表,我想知道你是怎么做到的。

我想在临时表中执行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

1 个答案:

答案 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表中的记录相关的字段。有时您必须进行额外的联接才能获得这种关系。