#r #sql-server-2008 #merge #upsert
#r #sql-server-2008 #слияние #обновить
Вопрос:
Я пытаюсь вставить и обновить на SQL Server из R.
У меня есть фрейм данных (New_mtcars), который содержит записи, которые не существуют в таблице базы данных SQL (dbo.mtcars) или существуют, но отличаются.
Как мне вставить и обновить (объединить?) записи из New_mtcars в таблицу Microsoft SQL server?
Я успешно создал строку подключения с помощью DBConnect и установил соединение с помощью ODBC. Однако после этого у меня возникли проблемы с рабочим процессом и синтаксисом.
Комментарии:
1.
UPSERT
Процесс полностью зависит от СУБД, и SQL Server не лишен своих нюансов и требований. Я нашел следующее очень полезным, когда мне нужно было работать с upserts: learn.microsoft.com/en-us/sql/t-sql/statements /… , michaeljswart.com/2017/07 /… , и mssqltips.com/sqlservertip/3074 /…2. Исходя из этого, я имею в виду, что некоторые СУБД так же просты, как вставка во временную таблицу, тогда
insert into tblname (var1,var2,...) select var1,var2,... from tmptbl ON CONFLICT (...) DO ...
, где конфликт / выполнение являются прямыми. Для SQL Server это не так просто…merge tblname with (holdlock) as tgt using (select varnames from tmptable) as src on (varnames) WHEN MATCHED THEN ... WHEN NOT MATCHED THEN ...
. В зависимости от ваших потребностей (и ограничений таблицы), может потребоваться несколько попыток, чтобы сделать это правильно.