SqlBulkCopy 到临时表中

问题描述 投票:0回答:1

我正在努力提高更新的性能。按照其他线程中的建议,我尝试使用

BulkInsert
进入临时表,然后使用
UPDATE... WHERE
加入生产表。

数据本身位于VB.net中的DataTable中,过去我广泛使用

SqlBulkInsert
将数据从DataTable快速加载到SQL Server中。所以我的想法是使用
DbCommand
来运行:

SELECT * INTO ##Projects FROM Projects WHERE 1=0

当我运行该代码时,当我查看 SSMS 时,我可以看到正在创建表(这就是我使用

##
的原因)。本例中的单个数据表条目是:

Name: "test"
Address: "123 Anywhere St.
City: "St. Louis"

完成后,我尝试运行:

   Using S As SqlBulkCopy = New SqlBulkCopy(ConStr)
       S.DestinationTableName = TableName
       S.WriteToServer(DT)
       S.Close()
   End Using

此操作失败并出现错误

SqlException:无效的对象名称“#Projects”

经过一番尝试后,我将

##
替换为
TEMP
来制作
TEMPProjects
,效果非常好。这是我之前多次使用过的代码。

看看这里的线程,像这个一样,似乎不需要特殊的设置来使用临时表。我很茫然,我是不是错过了什么?

sql-server sqlbulkcopy
1个回答
0
投票

问题是您提供的是连接字符串,而不是打开的连接,因此它将打开自己单独的连接。

该其他连接与其他连接没有关系,因此看不到其本地临时表。如果您关闭了之前的连接,那么所有全局临时表也会被删除。

您需要使用相同的连接,而不需要在它们之间关闭。您还需要确保创建临时表的命令不使用参数,否则它将在单独的范围内通过

SqlBulkCopy

进行操作。

sp_executesql

	
© www.soinside.com 2019 - 2024. All rights reserved.