2016-05-11 4 views
1

Недавно я опубликовал question, он содержит некоторую синтаксическую ошибку, теперь код работает без ошибок, благодаря @Arulkumar.Как избежать повторения ввода данных?

Но теперь я столкнулся с еще одной проблемой: данные из листа excel правильно хранятся в базе данных SQL Server, но когда я нажимаю кнопку обновления или я снова перехожу к этой ссылке в приложении, данные повторяются в базе данных , Средство снова возвращает значения из excel и сохраняет те же данные снова в базе данных.

Как избежать повторения данных. Может ли кто-нибудь помочь мне решить эту проблему? В вышеупомянутой ссылке есть образец кода и excel.

ответ

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' + 
+0

Привет, благодарю вас за ответ с объяснением строки за строкой, я попытался запустить код, он дает некоторые синтаксические ошибки: – naik3

+0

'{ [RequestError: Неправильный синтаксис около ключевого слова 'как'.] имя: 'RequestError', сообщение: 'Неправильный синтаксис около ключевого слова \' а \, код '': 'EREQUEST', номер: 156, LINENUMBER: 1, класс: 15, имя_сервера: 'локальный \\ SQLEXPRESS', PROCNAME: '', precedingErrors: [{[RequestError: Неправильный синтаксис около '('] имя:. 'RequestError', сообщение: '' 'Неправильный синтаксис около \' (\, код: 'EREQUEST', номер: 102, LINENUMBER: 1, состояние: 1, класс: 15, serverName: 'localhost \\ SQLEXPRESS', procName: ''}]} ' – naik3

+0

Дайте мне минуту, я испортил форматирование кода! – gofr1

Смежные вопросы