Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何编写使用从c创建的临时表的存储过程#_C#_Sql Server - Fatal编程技术网

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

C# 如何编写使用从c创建的临时表的存储过程#,c#,sql-server,C#,Sql Server,我有一个用C#开发的应用程序,它遵循以下流程: 读取CSV文件 创建临时表 使用SqlBulkCopy将CSV数据发送到临时表 调用存储过程将临时表合并到实表中 删除临时表 using (var dbConnection = new SqlConnection(_connectionString)) { dbConnection.Open(); using (var cmd = new SqlCommand("CREATE TABLE [#UpdatedData]([Path

我有一个用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 for dev和SQL Azure for production。

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

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


编辑


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

我终于在没有永久表或全局表的情况下创建了它


我没有尝试在SQL Server中创建合并存储过程,而是在C#中用字符串编写了一个大型合并函数,并将其作为普通SQL查询执行

sqlserver也有临时表的概念。你可以使用OPENROWSET…为什么不创建一个表,然后在完成后简单地截断它呢。有时,简单的解决方案是最好的。如果您解释一下为什么需要使用临时表,这会很有帮助。您描述的逻辑在ETL领域非常常见,但不需要使用临时表,只需使用永久表即可。@MarkKram请您举个例子,我对您的解决方案感兴趣!SQL Azure中没有全局临时表。无论如何谢谢:)@sweel哦,好吧(你每天都能学到新东西)。。。我想你得有一张固定的桌子