如何编写使用c#创建的临时表的存储过程
本文关键字:临时表 存储过程 创建 何编写 | 更新日期: 2023-09-27 18:09:01
我有一个用c#开发的应用程序,它遵循这个工作流:
- 读取CSV文件 创建临时表
- 使用SqlBulkCopy 将CSV数据发送到临时表
- 调用存储过程将临时表合并到真实表
删除临时表
using (var dbConnection = new SqlConnection(_connectionString)) { dbConnection.Open(); using (var cmd = new SqlCommand("CREATE TABLE [#UpdatedData]([Path] [nvarchar](50))", dbConnection)) { cmd.ExecuteNonQuery(); } using (var bulkCopy = new SqlBulkCopy(dbConnection)) { bulkCopy.DestinationTableName = "[#UpdatedData]"; bulkCopy.WriteToServer(dt); } using (var cmd = new SqlCommand("usp_MergeData", dbConnection)) { cmd.CommandType = CommandType.StoredProcedure; cmd.ExecuteNonQuery(); } using (var cmd = new SqlCommand("DROP TABLE [#UpdatedData]", dbConnection)) { cmd.ExecuteNonQuery(); } }
我的问题是我在c#中创建临时表,我不能写SQL Server存储过程,因为它找不到临时表。有什么变通办法吗?
我使用localdb用于开发和SQL Azure用于生产。
您可以创建一个全局临时表:
using (var cmd = new SqlCommand(
"CREATE TABLE [##UpdatedData]([Path] [nvarchar](50))"
, dbConnection))
在本地临时表名前加单数字符号(#table_name),在全局临时表名前加双数字符号(##table_name)。
编辑
由于在SQL Azure中无法创建全局临时表,因此您可能必须创建一个真正的表
我终于使它没有永久表或全局表了!
我没有尝试在SQL Server中创建MERGE存储过程,而是用c#在字符串中编写了一个大的MERGE函数,并将其作为普通的SQL查询执行!