我遇到的情况是我有两个数据库,一个是oracle数据库,另一个是sql server。在oracle中我至少有300K,在sql server中我有400K记录。我想检查sql服务器中是否存在oracle数据。我尝试使用每种方法检查oracle中的每条记录(如果sql服务器中是否存在),并且花费了很长时间。我问你是否有另一种方法可以给我相同的结果。我正在使用LINQ进行查询
conn.Open();
cmd = new OdbcCommand()
{
Connection = conn,
CommandText = "select c_id, c_name,c_dob,c_email,c_pnumber from customers"
CommandType = CommandType.Text
};
OdbcDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
var customers = _db.tblCustomers.FirstOrDefaulst(x
=>x.C_ID.Equals(dr.GetValue(0))
if(customers !=null)
{
//do something
}
else
{
tblCustomers customer = new tblCustomers {
C_name = Convert.ToString(dr.GetValue(1)),
C_dob = Convert.ToString(dr.GetValue(2)),
C_email = Convert.ToString(dr.GetValue(3)),
C_pnumber = Convert.ToString(dr.GetValue(4))
}
}
}
P.S:这只是用于添加新客户,但是我还有另一个具有相同逻辑的代码来更新记录,我应该每天运行这些方法
查询添加新记录
var customers = _db.tblCustomers.FirstOrDefaulst(x
=>x.C_ID.Equals(dr.GetValue(0))
查询更新现有记录
var customers = _db.tblCustomers.FirstOrDefaulst(x
=>x.C_ID.Equals(dr.GetValue(0)) && x.c_name == dr.GetValue(1) )
答案 0 :(得分:0)
根据我的评论,建议使用第一种方法。
Select A.columns, B.columns from SQL_Table A INNER JOIN Oracle_TABLE B
ON A.common_column = B.common_column
-如果可以进一步过滤所需的记录
and A.column = value and B.column = value
OR
您可以通过链接服务器使用oracle表,但是由于延迟,这可能对性能产生小的影响。
您可以使用linq调用存储过程。请参见下面的Stackoverflow链接。
Access stored procedure using Linq-to-SQL
或者您可以使用ADO.NET来调用存储过程。
根据我的评论,使用下面的插入查询。
INSERT INTO SQL_TABLE(write all the column names of
SQL_Table where you want to insert value from oracle table)
SELECT Distinct B.Columns from Oracle_TABLE B INNER JOIN SQL_TABLE A
ON A.common_column <> B.common_column
答案 1 :(得分:0)
大声考虑后,我认为在存储过程中使用下面的子查询比使用Joins更有效,这样做也更有效。我们通常使用等号(=)而不是(<>)的联接。这是标准做法:)。 假设两个表(SQL和Oracle)中都有一个具有唯一值的公共列,请使用下面的子查询语法,它将轻松地从Oracle表中添加SQL表中缺少的记录。 如果您需要有关查询的详细说明,请告诉我。
INSERT INTO SQL_Table(write all the column names of SQL_Table where you want values)
Select B.columns from Oracle_Table B where B.common_unique_column NOT IN (select A.common_unique_column from SQL_TABLE A)
答案 2 :(得分:0)
您可以尝试这样
1.首先获得一个特定的项目作为与SQL数据匹配的Oracle数据列表
2.使用Contains()
函数将oracle数据与sql数据匹配,并获取与sql数据匹配的数据列表...
从两个表中选择必须包含在两个表中的列数据作为列表
下面的示例代码
var oracleCustomerList=_db.tblCustomers.Select(m=>m.coustomerName).ToList();
var sqlCustomerList=db.tblCustomers.Where(x=>oracleCustomerList.Contains(n=>n.coustomerName)).ToList();