2

我有一个用 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 用于生产。

4

2 回答 2

1

您可以创建一个全局临时表:

using (var cmd = new SqlCommand(
    "CREATE TABLE [##UpdatedData]([Path] [nvarchar](50))"
    , dbConnection))

本地临时表名称前缀为单号 (#table_name),全局临时表名称前缀为双号 (##table_name)。


编辑

由于您不能在 SQL Azure 中拥有全局临时表,因此您可能必须创建一个真实表。

于 2013-04-12T10:03:53.457 回答
0

我终于在没有永久表或全局表的情况下做到了!

我没有尝试在 SQL Server 中创建 MERGE 存储过程,而是在 C# 的字符串中编写了一个大的 MERGE 函数,并像普通 SQL 查询一样执行它!

于 2013-04-12T14:33:45.380 回答