这是向 SQL 服务器 table 添加多行的最快方法吗

Is this the fastest way to add multiple rows to a SQL Server table

我有一个一般性问题,但我还没有找到任何答案。我认为问这个问题很重要,这样我就知道如何构建整个应用程序,所以我从一开始就走在正确的轨道上。

我认为在一个查询命令中添加多行是 practical/efficient。下面的代码一次在 5 列中添加 3 行和 5 个值。

也请参阅 table 的这张图片:

我现在的问题是。这个 table 稍后将有 100,000 列,我正在考虑例如一次添加 10 行。现在想象这个 cmdString 会非常长。

我的问题很简单。当我在一个查询中添加如此多的信息时,这样可以吗?或者这是错误的方式吗? (这是最快的方法还是我应该以其他方式执行下面的代码?)

谢谢!

void addMultipleRowWithValuesSQL()
{
    String cmdString = "INSERT INTO DateTimes(DateTime,F1,F2,G1,G2) " + 
                       "VALUES" +
                           "('201005011715','1',2,'3','4')," +
                           "('201005011730','5',6,'7','8')," +
                           "('201005011745','9',10,'11','12');";
 
    using (SqlConnection conn = new SqlConnection(GetConnectionString()))
    {
        using (SqlCommand comm = new SqlCommand(cmdString))
        {
            try
            {
                comm.Connection = conn;

                conn.Open();
                int i = comm.ExecuteNonQuery();

                if (i != 0) 
                {
                    MessageBox.Show(i + "Rows Added"); 
                }
            }
            catch (SqlException ex) 
            {
                 MessageBox.Show(ex.ToString()); 
            }
        }
    }
}

static private string GetConnectionString()
{
    return "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\andre\source\repos\TestDatabaseCreation\DatabaseTest.mdf;Integrated Security=True;Connect Timeout=30";
}

他们称之为批量插入,这里link会给你一个很好的例子来解释。 从 C# 批量插入 SQL 服务器

我正在看这个 link,它也展示了如何在一个事务中添加多行。 https://docs.microsoft.com/en-us/azure/azure-sql/performance-improve-use-batching

我的问题是这是否是一种有效且好的方法batch insert
或者这段代码是否也像我原来的 post 那样涉及大量的解析,如果我在一个事务中添加例如 10,000 行和 VALUES 例如 200 列?

只是想确认一下。代码确实有效。

    void addMultipleRowWithValuesSQL()
    {
        List<string> dbOperations = new List<string>();
        dbOperations.Add("INSERT INTO DateTimes(DateTime, F1, F2, G1, G2) VALUES('201005011800', '11', '22', '33', '44');");
        dbOperations.Add("INSERT INTO DateTimes(DateTime, F1, F2, G1, G2) VALUES('201005011815', '55', '66', '77', '88');");
        dbOperations.Add("INSERT INTO DateTimes(DateTime, F1, F2, G1, G2) VALUES('201005011830', '99', '100', '101', '102');");

        using (SqlConnection conn = new SqlConnection(GetConnectionString()))
        {
            conn.Open();
            SqlTransaction transaction = conn.BeginTransaction();

            foreach (string commandString in dbOperations)
            {
                SqlCommand cmd = new SqlCommand(commandString, conn, transaction);
                cmd.ExecuteNonQuery();
            }
            transaction.Commit();
        }
    }