【发布时间】:2017-12-15 10:25:10
【问题描述】:
我尝试将一个 data.table 从 R 插入 SQL Server 2012 数据库:
library(data.table)
library(odbc)
library(dplyr)
upload.data <- data.table(readxl::read_excel(path = uploadfile.file, sheet =
sheet_no, skip = skip_rows), col_names = TRUE)
odbcChannel <- dbConnect(odbc::odbc(), "SQL")
dbWriteTable(odbcChannel, "Table_Name", upload.data, append = TRUE, overwrite = FALSE, row.names=FALSE, encoding = "latin1")
数据表中的列是 chr 类型。 SQL Server 中目标表的列类型为varchar(50)。
我的理解是 chr 将被上传为varchar(255)。因此,我会收到错误:
result_insert_dataframe(rs@ptr, values) 中的错误:
nanodbc/nanodbc.cpp:1587:22001:[Microsoft][ODBC SQL Server Driver]字符串数据,右截断
如何更改 R 中的列以匹配数据库中表的特定需求?
如果列中的内容不适合数据库表,我希望将信息删除。
一种解决方案:将数据表上传到服务器的新表中,然后编辑要匹配的类型:
dbSendStatement(odbcChannel,"ALTER TABLE Table_Name
ALTER COLUMN Batch_Name Nvarchar(50)")
之后我可以将数据插入到目标表中。但这似乎相当复杂,尤其是如果数据库中的每一列都有不同的类型。
最好的问候和感谢,
生命值
【问题讨论】:
标签: sql-server r database data.table