1

最近質問を投稿しました。構文エラーが含まれていますが、@Arulkumar のおかげでコードがエラーなしで実行されるようになりました。

しかし今、もう 1 つの問題に直面しています。Excel シートのデータは SQL Server データベースに正しく保存されていますが、更新ボタンを押すか、アプリケーションでそのリンクに再度アクセスすると、データがデータベースで繰り返されます。繰り返しますが、Excel から値を取得し、同じデータをデータベースに再度保存していることを意味します。

データの繰り返しを避けるにはどうすればよいですか。誰でもこの問題を解決するのを手伝ってもらえますか? コードと Excel シートのサンプルは、上記のリンクにあります。

4

1 に答える 1

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' + 
于 2016-05-11T09:38:13.487 に答える