gpt4 book ai didi

sql-server - 通过 ODBC dbWriteTable 上传到 SQL Server 2012 - 错误 "String data, right truncation"列类型 chr 与 nvarchar(50)

转载 作者:搜寻专家 更新时间:2023-10-30 20:49:23 27 4
gpt4 key购买 nike

我尝试从 R 中插入一个 data.table 到 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) 上传。因此,我会得到错误:

Error in result_insert_dataframe(rs@ptr, values) :
nanodbc/nanodbc.cpp:1587: 22001: [Microsoft][ODBC SQL Server Driver]String data, right truncation

如何更改 R 中的列以满足数据库中表的特定需求?

如果列中有不适合数据库表的内容,我希望信息被删除。

一种解决方案:将数据表上传到服务器的新表中,然后编辑类型以匹配:

dbSendStatement(odbcChannel,"ALTER  TABLE Table_Name
ALTER COLUMN Batch_Name Nvarchar(50)")

在此之后,我可以将数据插入到目标表中。但这看起来相当复杂,特别是如果数据库中的每一列都有不同的类型。

致以最诚挚的问候和我的谢意,

生命值

最佳答案

我找到了这个问题的解决方案。

如果我使用下面的代码,我可以定义字段类型和长度:

sql.field.types <- list(Batch_Name = "nvarchar(50)")

dbWriteTable(odbcChannel, "Table_Name", upload.data, append = TRUE, overwrite = FALSE,
row.names=FALSE, encoding = "latin1", field.types = sql.field.types )

如果数据表中的某一列中的内容比数据库中定义的更长,这仍然会给我错误消息。

但是最好用R调整数据表中的数据,使其符合数据库的要求。因此,您始终拥有一个明确且可重复的流程。

最好的问候,

生命值

关于sql-server - 通过 ODBC dbWriteTable 上传到 SQL Server 2012 - 错误 "String data, right truncation"列类型 chr 与 nvarchar(50),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47830298/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com