最近,我发布了一个question,其中包含一些语法错误,这要归功于@Arulkumar,现在代码正在正确运行。

但是现在我面临另一个问题,Excel工作表中的数据已正确存储到SQL Server数据库中,但是当我按下刷新按钮或如果我在应用程序中再次转到该链接时,数据将在数据库中重复。再次意味着它正在从excel中检索值并将相同的数据再次存储在数据库中。

如何避免数据重复。谁能帮我解决这个问题?上述链接中包含代码和Excel工作表示例。

最佳答案

您需要MERGE语句

request.query('MERGE [mytable] as target USING (SELECT SalesPersonID, TerritoryID FROM OPENROWSET('  +
        '\'Microsoft.ACE.OLEDB.12.0\', \'Excel 12.0;Database=D:\\sample\\test\\data\\1540_OPENROWSET_Examples.xls;HDR=YES\', ' +
        '\'SELECT SalesPersonID, TerritoryID FROM [SELECT_Example$]\')' +
        ' ) as source' +
        ' ON target.SalesPersonID = source.SalesPersonID' +
        ' WHEN MATCHED THEN UPDATE SET TerritoryID = source.TerritoryID' +
        ' WHEN NOT MATCHED THEN INSERT (SalesPersonID, TerritoryID) VALUES (source.SalesPersonID, source.TerritoryID);'
        ,function(err,recordset){
    if(err) console.log(err)


如果已经存在具有相同TerritoryID的行,它将更新SalesPersonID;如果mytable中没有匹配项,则将插入行。

如果您需要在两个字段上都加入,请进行以下更改:

ON target.SalesPersonID = source.SalesPersonID


在此:

ON target.SalesPersonID = source.SalesPersonID AND target.TerritoryID = source.TerritoryID


然后,删除该字符串,因为它不再需要了:

'WHEN MATCHED THEN UPDATE SET TerritoryID = source.TerritoryID' +

07-26 09:35
查看更多