【发布时间】:2014-10-09 04:15:50
【问题描述】:
我完全不知道这个问题,任何帮助将不胜感激:
我有两张表,一张是主数据表(Table A),另一张表(Table B)与Table A中的一个条目有多个条目(具体为18个)的外键关系。
我正在获取列表中的数据并希望将其插入 SQL Server 数据库中。
我目前正在使用以下模式,但在 Table A 中插入 100 行并在 Table B 中插入相应的 18*100 行需要 14 分钟。
using (SqlConnection conn = new SqlConnection(conStr))
{
foreach (var ticket in Tickets)
{
sql = string.Format(@"INSERT INTO dbo.Tickets([ColumnA], [ColumnB] ,..." + @")
VALUES(@ColumnA, @ColumnB,@ColumnC, @ColumnD, .... +
@"SELECT SCOPE_IDENTITY();");
using (cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@ColumnA", (object)ticket.Id ?? DBNull.Value);
cmd.Parameters.AddWithValue("@ColumnB", (object)ticket.Address ?? DBNull.Value);
cmd.Parameters.AddWithValue("@ColumnC", (object)ticket.Status?? DBNull.Value);
....
conn.Open();
TableA_TicketId = Convert.ToInt32(cmd.ExecuteScalar());
}
}
}
我使用SCOPE_IDENTITY() 从表 A 中获取插入的每条记录的最新标识,并将其用于插入第二个表中
sql = string.Format(@"INSERT INTO Tickets_Fields ([TableA_TicketId], [FieldName], [Key],[Value])
VALUES (@TableA_TicketId, @FieldName, @Key, @Value);");
using (cmd = new SqlCommand(sql, conn))
{
foreach (var customField in ticket.CustomFields)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@TableA_TicketId", (object)TicketId ?? DBNull.Value);
cmd.Parameters.AddWithValue("@FieldName", (object)"CustomField" ?? DBNull.Value);
...
cmd.ExecuteNonQuery();
}
}
conn.Close();
请建议我是否可以通过任何方式提高此代码的性能。还是他们有更好/更快的方法?
【问题讨论】:
标签: c# sql sql-server performance bulkinsert