Я преобразую приложение Excel из локальной серверной части MS Access (с DAO) в SQL Server, работающий на Azure (с ADO).
Обычная задача, которую я выполняю с помощью DAO, - это метод index + seekсканировать большое количество входных строк (~ 10 000 и с использованием многопольных индексов), проверять соответствие записей в базе данных и обновлять или добавлять новые записи по мере необходимости.Свойство NoMatch метода Seek работает очень хорошо при принятии решения о добавлении или обновлении.
Кажется, что это должно быть довольно просто с SQL Server, но я не могу найти хорошее решение, которое позволяет мне проверятьдля совпадений добавьте или обновите и используйте многостолбцовые индексы.
Загрузка таблицы в память, а затем выполнение пакетного обновления было бы хорошо, но метод Find в ADO выглядит не так хорошо, как index + seek, и этоне может использовать несколько столбцов.Подключение к SQL Server с поставщиком ADO, который поддерживает поиск по индексу, также будет работать (Jet 4.0?), Но я также не могу найти примеры этого.
Я что-то упускаю из виду?Каков наилучший способ проверить и добавить или обновить большое количество строк в SQL Server?Спасибо
Редактировать: Вот простой пример операции, которую я сейчас выполняю в Access / DAO:
Set rs = db.OpenRecordset("TableName", dbOpenTable)
With rs
.Index = "MultiFieldIndex"
'Loop through the input data
For i = 1 To 10000
.Seek "=", Criteria1, Criteria2
If Not .NoMatch Then
'Found a match, just update specific fields
!Field1 = a
!Field2 = b
Else
'No match found, add a new record then populate
.AddNew
!Field3 = c
!Field4 = d
End If
.Update
Next i
End With
Каков наилучший способ сделать что-то подобное только с SQL?Вероятно, я бы все-таки начал с загрузки отключенного набора записей полной целевой таблицы, но не уверен, как обновить несколько тысяч записей, когда не знаю, нужно ли мне обновлять или добавлять новые, или значения входных данных.критерии.Как найти строки, которые мне нужно обновить / проверить без индекса + поиска?
ИЛИ я могу создать временную таблицу в памяти только с входными данными, а затем как-то просто «объединить» эту таблицу с базой данных иБД выяснит, как обновить или добавить?
Мне кажется, это должна быть довольно простая процедура, но, может быть, я просто упускаю фундаментальную концепцию SQL?
Спасибо за помощь!