0
我尝试从informix
分贝迁移员工的列表中的数据,以sqlserver2012
分贝,所以,首先我在informix
选择这样数据迁移到SQLSERVER数据库
从表中数据-The:
string cmdText = "select * from permission where emp_num in(" + emplyeeRange + ") and perm_date>=? and perm_date <=?";
DataTable permissionDT = ifx_conn.Return_DataTable(cmdText, CommandType.Text, paramList1);
cmdText = "select * from holid where emp_num in(" + emplyeeRange + ") and end_date>=? and start_date<=? ";
DataTable vacationDT = ifx_conn.Return_DataTable(cmdText, CommandType.Text, paramList1);
cmdText = "select * from empmission where emp_num in(" + emplyeeRange + ") and date(to_date)>=? and date(from_date)<=? ";
DataTable missionDT = ifx_conn.Return_DataTable(cmdText, CommandType.Text, paramList1);
- 然后我从sqlserver
在相同范围内的日期这样删除数据:
cmdText = "delete from permission where emp_num in(" + emplyeeRange + ") and perm_date>[email protected]_date and perm_date <[email protected]_date";
sql_command.CommandType = CommandType.Text;
sql_command.Parameters.AddWithValue("@from_date", from_date.ToShortDateString());
sql_command.Parameters.AddWithValue("@to_date", to_date.ToShortDateString());
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "delete from holid where emp_num in(" + emplyeeRange + ") and end_date>[email protected]_date and start_date<[email protected]_date ";
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "delete from empmission where emp_num in(" + emplyeeRange + ") and to_date>[email protected]_date and from_date<[email protected]_date";
sql_command.CommandText = cmdText;
result = sql_command.ExecuteNonQuery();
}
}
个
- 然后插入在sqlserver
更新的数据是这样的:
cmdText = "insert into permission select * from @permissionDT ";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@permissionDT", permissionDT);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.permissionType";
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "insert into holid select * from @vacationDT";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@vacationDT", vacationDT);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.holidType";
result = sql_command.ExecuteNonQuery();
if (result >= 0)
{
cmdText = "insert into empmission select * from @missionDT";
sql_command.CommandText = cmdText;
sql_command.Parameters.Clear();
sql_param = sql_command.Parameters.AddWithValue("@missionDT", missionDT);
sql_param.SqlDbType = SqlDbType.Structured;
sql_param.TypeName = "dbo.empmissionType";
result = sql_command.ExecuteNonQuery();
}
}
我的主要问题是:
这个过程需要这么长的时间,并减少sqlserver
性能,如何优化此代码和有关数据库操作的查询?
你简单地迁移数据或做一些事情比这更所有正确的索引?为什么在插入之前需要从目的地删除? – agfc
@agfc:我做了一些处理之后,我需要删除,因为我想迁移的数据可能会被复制,或某些记录从源删除或特定字段在源中更新。这个操作执行多次,所以我需要删除然后插入。 –