我有一個數據表匹配MS Sql表的結構,我想從數據表導入新的記錄到SQL中。從數據表導入到SQL表的唯一記錄
因此,在下面的示例中,我正在尋找導入Jim的記錄。
數據表:
Name DOB Country
Brian 11-11-78 USA
Dave 01-01-80 UK
Jim 02-02-81 FR
SQL:
Name DOB Country
Brian 11-11-78 USA
Dave 01-01-80 UK
我有一個數據表匹配MS Sql表的結構,我想從數據表導入新的記錄到SQL中。從數據表導入到SQL表的唯一記錄
因此,在下面的示例中,我正在尋找導入Jim的記錄。
數據表:
Name DOB Country
Brian 11-11-78 USA
Dave 01-01-80 UK
Jim 02-02-81 FR
SQL:
Name DOB Country
Brian 11-11-78 USA
Dave 01-01-80 UK
您可以使SP,並傳遞您在數據表中有值,並且使用MERGE (Transact-SQL)做INSERT /更新:
根據你的數據修剪,假設你的名字SQL表_DOB
:
MERGE INTO _DOB AS Target
USING (--SELECT NAME,DOB,COUNTRY FROM FROM YOUR DataTable
VALUES ('Jim','1978-11-11', 'FR')
)
AS Source (Name, DOB, Country)
ON
Target.Name = Source.Name
AND Target.DOB = Source.DOB
WHEN MATCHED THEN
UPDATE SET
Target.Name = Source.Name,
Target.DOB = Source.DOB,
Target.Country = Source.Country
WHEN NOT MATCHED BY TARGET THEN
INSERT (Name, DOB, Country)
VALUES (Source.Name, Source.DOB, Source.Country);
INSERT INTO
datatable (name, dob, country)
SELECT
name, dob, country
FROM
sql
WHERE
NOT EXISTS(
SELECT
*
FROM
datatable
WHERE
datatable.name=sql.name AND
datatable.dob=sql.dob
)
這是我結束了,似乎這樣的伎倆。感謝所有的投入。
this.conn = new oleDbConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString);
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM name", conn);
DataSet ds = new DataSet();
adapter.Fill(ds, "name");
DataTable data = ds.Tables["name"];
sqlCommand = "CREATE TABLE ##TempTable(Name, DOB, Location)";
SqlConnection SQLconn = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection1"].ConnectionString);
SQLconn.Open();
using (SqlCommand cmd = new SqlCommand(sqlCommand, SQLconn))
{
cmd.CommandType = CommandType.Text;
cmd.ExecuteReader();
SqlBulkCopy bulkCopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString);
// Map the columns
foreach (DataColumn col in data.Columns)
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
bulkCopy.DestinationTableName = "##TempTable";
bulkCopy.WriteToServer(data);
}
string MergeCommand = string.Concat("insert into [Existing Table] (Name, DOB, Location) ",
"select distinct Name, DOB, Location from ##TempTable ",
"WHERE NOT EXISTS (SELECT 1 FROM [Existing Table] a WHERE a.[Name] = ##TempTable.[Name] and a.[DOB] = ##TempTable.[DOB])");
SqlConnection Mergeconn = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString);
Mergeconn.Open();
using (SqlCommand MergeCmd = new SqlCommand(MergeCommand, Mergeconn))
{
MergeCmd.CommandType = CommandType.Text;
MergeCmd.ExecuteReader();
}
SQLconn.Close();
Mergeconn.Close();
表中的主鍵是什麼?您可以將所有記錄從原始數據庫導入臨時表,然後執行MERGE(SQL Server) – Tony 2010-10-18 09:45:20
對不起,我沒有PK。我計劃結合使用Name和DOB的組合來區分。 – Brian 2010-10-18 09:54:38
另請參閱Microsoft Sync Framework(http://msdn.microsoft.com/zh-cn/sync/default.aspx) – 2010-10-18 09:54:43