如何避免数据重复插入?

时间:2016-05-11 06:35:11

标签: sql-server node.js excel openrowset node-mssql

最近我发布了一个question,它包含一些语法错误,现在代码运行没有错误,感谢@Arulkumar。

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

如何避免重复数据。任何人都可以帮我解决这个问题吗?代码和excel表样本在上面提到的链接中。

1 个答案:

答案 0 :(得分:1)

您需要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' +