Если вы тестировали свой код на той же версии SQL Server 2016
используя SQL Server Native Client 11.0
(у меня не установлен ваш драйвер) и отслеживал код SQL, выполненный на сервере.
Я использую набор данных iris
:
dbWriteTable(con, "iris", iris, overwrite = FALSE, append = TRUE)
Пакет odbc
в основном выдает эти команды (подготовленный оператор):
declare @p1 int
set @p1=9
exec sp_prepare @p1 output,N'@P1 float,@P2 float,@P3 float,@P4 float,@P5 varchar(255)',N'INSERT INTO "iris" ("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")
VALUES (@P1, @P2, @P3, @P4, @P5)',1
select @p1
exec sp_execute 9,5.0999999999999996,3.5,1.3999999999999999,0.20000000000000001,'setosa'
[... multiple inserts...]
exec sp_unprepare 9
Таким образом, нет риска параллельного выполнения вашего кода в нескольких сеансах, помимо обычного SQL Server, например, недетерминированного порядка вставки строк (что может привести к различным значениям автоматического ввода для одной и той же вставленной строки, если вы попытаетесь воспроизвести поведение ).
У вас также будет четыре открытых соединения (вообще никаких проблем).
Если ваша цель - производительность вставки, можно использовать разные методы массовой вставки SQL Server, но производительность dbWriteTable
отличная (если вы используете актуальную версию).
Подробнее о «массовой загрузке» через пакет odbc
см.
https://github.com/r-dbi/odbc/issues/34
Добавлено позже:
каждая таблица экспорта в сеансе будет относительно уникальной
но некоторые столбцы могут иметь одинаковое значение (естественно).
Если ваша целевая таблица не имеет первичного ключа, это не проблема
вставлять дублированные строки (пока вы не захотите повторно идентифицировать одиночные
строки, но это проблема чистого SQL). Вы можете добавить строку идентификатора к вашим data.table
с помощью шаблона high-low, чтобы решить эту проблему (high = уникальное значение для каждого сеанса, low = последовательность R из 1:NROW(data)
, а затем добавить высокое значение, например. "10000000 «чтобы общие идентификаторы были уникальными во всех ваших сессиях, но, конечно, имели пробелы).