c# - 如何编写使用从 C# 创建的临时表的存储过程

标签 c# sql-server

我有一个使用 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))

Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).


编辑

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

关于c# - 如何编写使用从 C# 创建的临时表的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968188/

相关文章:

mysql - redshift 查询以获得所需的输出

sql-server - 无法远程连接到 Windows Server 2012 R2 上的 SQL Server 2014

sql - 为什么在 View 中添加 ROW_NUMBER 需要花费太多时间来执行?

C# 'Newtonsoft.Json.Linq.JValue' 不包含 'Contains' 的定义

c# - 在 C# 中从 WebApi 获取数据

c# - 如何在请求过滤器的 ViewResult 上设置 View 模型?

c# - 通过属性值访问 xml 元素

sql - 表值函数 - 输出中忽略排序依据

sql - 如何将文本列值复制到新的非空列

c# - 解析带空格和引号的字符串(保留引号)