我想使用 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)
但是,如果我从数据库中删除主键,则该表的一切正常:
CREATE TABLE [dbo].[results] (
[FirstName] VARCHAR (255) NULL,
[LastName] VARCHAR (255) NULL,
[Birthday] DATETIME NULL,
[CreateDate] DATETIME NULL
);
显然主键是问题所在。通常,使用实体框架或其他框架(据我了解),当您输入数据时,主键是在数据库中创建的。
我想要一种仅使用 R 脚本将数据附加到具有主键的表的方法。那可能吗?我要添加到的表中可能已经有数据,因此在尝试附加到表之前,我确实没有找到在 R 中创建键的方法。