Я хотел бы ввести фрейм данных в существующую таблицу в базе данных, используя скрипт R, и я хочу, чтобы таблица в базе данных имела последовательный первичный ключ. Моя проблема в том, что RODBC, похоже, не допускает ограничения первичного ключа.
Вот SQL для создания таблицы, которую я хочу:
CREATE TABLE [dbo].[results] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[FirstName] VARCHAR (255) NULL,
[LastName] VARCHAR (255) NULL,
[Birthday] DATETIME NULL,
[CreateDate] DATETIME NULL,
CONSTRAINT [PK_dbo.results] PRIMARY KEY CLUSTERED ([ID] ASC)
);
И тест с некоторым кодом R:
ConnectionString1="Driver=ODBC Driver 11 for SQL Server;Server=myserver; Database=TestDb; trusted_connection=yes"
ConnectionString2="Driver=ODBC Driver 11 for SQL Server;Server=notmyserver; Database=TestDb; trusted_connection=yes"
db1=odbcDriverConnect(ConnectionString1)
query="SELECT a.[firstname] as FirstName
, a.[lastname] as LastName
, Cast(a.[dob] as datetime) as Birthday
, cast(a.createDate as datetime) as CreateDate
FROM [dbo].[People] a"
results=NULL
results=sqlQuery(db1,query,stringsAsFactors=FALSE)
close(db1)
db2=odbcDriverConnect(ConnectionString)
sqlSave(db2,
results,
append = TRUE,
varTypes=c(Birthday="datetime", CreateDate="datetime"),
colnames = FALSE,
rownames = FALSE,fast=FALSE)
close(db2)
Первая часть кода R просто передает некоторые тестовые данные в фрейм данных - он работает нормально, и это не часть моего вопроса здесь (я просто включаю его здесь, чтобы вы могли увидеть, в каком формате тестовые данные ). Когда я запускаю функцию sqlSave
, я получаю сообщение об ошибке:
Ошибка в dimnames (x) <- dn:
длина 'dimnames' [2] не равна экстенту массива </p>
Однако, если я удаляю первичный ключ из базы данных, все отлично работает с этой таблицей:
CREATE TABLE [dbo].[results] (
[FirstName] VARCHAR (255) NULL,
[LastName] VARCHAR (255) NULL,
[Birthday] DATETIME NULL,
[CreateDate] DATETIME NULL
);
Очевидно, что первичным ключом является проблема. Обычно в рамках сущности или где-либо еще (насколько я понимаю) первичный ключ создается в базе данных при вводе данных.
Я бы хотел добавить данные в таблицу с первичным ключом, используя только R-скрипт. Это возможно? В таблице, к которой я добавляю, уже могут быть данные, поэтому я не вижу способа создать ключи в R, прежде чем пытаться добавить в таблицу.