Snowflake SQL,使用参数化SQL一次插入多行

时间:2018-09-25 18:55:02

标签: sql snowflake

因此,我目前仅尝试简单地遍历for循环,然后将值批量插入雪花中,但是,似乎只是一次运行每个查询,而不是将它们堆积在一起。

我一直在寻找其他使用IDbCommand的解决方案,但似乎没有一个...

        //SnowflakeConnector snowflake = snowflakeCon;
        //IDbCommand snowCommand = snowflake.con.CreateCommand();
        try
        {

            IDbCommand cmd = snowflake.con.CreateCommand();
            cmd.CommandText = "insert into TEST values (?)";
            //IDataReader reader = cmd.ExecuteReader(); // this crashes

            var p1 = cmd.CreateParameter();
            p1.ParameterName = "1";
            p1.Value = 10;
            p1.DbType = DbType.Int32;
            cmd.Parameters.Add(p1);


            for (int i = 0; i < 100; i++)
            {
                p1.Value = i;
                cmd.ExecuteNonQuery(); // inserts one at a time instead of bulk
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

提供的文档是一个非常基本的示例; https://github.com/snowflakedb/snowflake-connector-net

2 个答案:

答案 0 :(得分:0)

要添加到该问题的评论中,我将提出两个建议。

  1. 每个文件的批量上传到雪花的建议大小为10 MB到100 MB。

  2. 我查看了Snowflake .NET连接器文档,发现它们不需要for循环来插入数据,而应该尝试这样做(来自其文档):

using (IDbConnection conn = new SnowflakeDbConnection())
{
    conn.ConnectionString = connectionString;
    conn.Open();

    IDbCommand cmd = conn.CreateCommand();
    cmd.CommandText = "insert into t values (?),(?),(?)";
    IDataReader reader = cmd.ExecuteReader();

    var p1 = cmd.CreateParameter();
    p1.ParameterName = "1";
    p1.Value = 10;
    p1.DbType = DbType.Int32;
    cmd.Parameters.Add(p1);

    var p2 = cmd.CreateParameter();
    p2.ParameterName = "2";
    p2.Value = 10000L;
    p2.DbType = DbType.Int32;
    cmd.Parameters.Add(p2);

    var p3 = cmd.CreateParameter();
    p3.ParameterName = "3";
    p3.Value = (short)1;
    p3.DbType = DbType.Int16;
    cmd.Parameters.Add(p3);

    var count = cmd.ExecuteNonQuery();
    Assert.AreEqual(3, count);             

    conn.Close();
}

发件人:https://github.com/snowflakedb/snowflake-connector-net

答案 1 :(得分:0)

我相信它仍然运行插入。如果要批量插入,则应使用COPY命令。