У меня есть книги Excel с кода ниже -вставки новых записей только в SQL таблицы с использованием VBA
Sub Button1_Click()
Dim conn As New ADODB.Connection
Dim iRowNo As Integer
Dim sFirstName, sLastName As String
With Sheets("Sheet1")
'Open a connection to SQL Server
conn.Open "Provider=SQLOLEDB;" & _
"Data Source=server1;" & _
"Initial Catalog=table1;" & _
"User ID=user1; Password=pass1"
'Skip the header row
iRowNo = 2
'Loop until empty cell in CustomerId
Do Until .Cells(iRowNo, 1) = ""
sFirstName = .Cells(iRowNo, 1)
sLastName = .Cells(iRowNo, 2)
'Generate and execute sql statement
' to import the excel rows to SQL Server table
conn.Execute "Insert into dbo.Customers (FirstName, LastName) " & _
"values ('" & sFirstName & "', '" & sLastName & "')"
iRowNo = iRowNo + 1
Loop
MsgBox "Customers imported."
conn.Close
Set conn = Nothing
End With
End Sub
Это открывает подключение к моей базе данных и вводит значения из указанных столбцов.
Первичный ключ - это инкрементный ключ в базе данных. Проблема в том, что он скопирует ВСЕ значения.
Я хотел бы добавить новые строки данных в лист Excel и вставить только те строки, которые еще не существуют.
Я пробовал разные методы ('merge', 'if exist', if not exist 'и т. Д.), Но я не могу понять это правильно.
Решение должно быть через VBA. Настройка ссылки с использованием SSMS не является вариантом.
Я понимаю, что возможно использование временных таблиц, а затем запуск процедуры, которая выполняет слияние, но я хочу рассмотреть это как последнее средство. Еще не прочитал об этом (пробираясь в моей библейской книге MS SQL), но я надеюсь, что это не понадобится.
--- Обновление от @ ответ Kannan в ---
Новая часть VBA -
conn.Execute "IF EXISTS (SELECT 1 FROM dbo.Customers WHERE FirstName = '" & sFirstName & "' and LastName = '" & sLastName & "') " & _
"THEN UPDATE dbo.customers SET WHERE Firstname = '" & sFirstName & "' and LastName = '" & sLastName & "' " & _
"ELSE INSERT INTO dbo.Customers (FirstName, LastName) " & _
"VALUES ('" & sFirstName & "', '" & sLastName & "')"
Это возвращает ошибку «Неправильный синтаксис около ключевого слова 'THEN'.
Это место на. Спасибо, BeanFrog. Я действительно пытался, ЕСЛИ НЕ СУЩЕСТВУЕТ раньше, но я, очевидно, не понял. Я определенно не использовал часть «Выбрать 1». Не могли бы вы рассказать мне, как работает SELECT 1? – Jamsandwich
Это просто регулярный оператор select, но вместо любых столбцов вы выбираете номер 1.Все это делается для предотвращения накладных расходов на получение всех подробностей столбца, когда все, что вам нужно знать, это «эта строка существует», а не «что находится в этой строке». – BeanFrog
Удивительный. Еще раз спасибо. Это будет хорошо настроить меня, как только вы окончательно начнете работать над SQL. – Jamsandwich