【发布时间】:2017-12-11 18:26:28
【问题描述】:
我正在尝试使用以下方法将数据框附加到 sql server 表中:
DBI::dbWriteTable(con_poc, "DEP_EVENTS", data_up, overwrite=FALSE, append = TRUE, verbose = TRUE, rownames = FALSE)
但我在数据库中的“日期”类型的列上遇到错误。
Error in result_insert_dataframe(rs@ptr, values) :
nanodbc.cpp:1587: 22003: [Microsoft][ODBC SQL Server Driver]Numeric value out of range
我之前使用 as.POSIXct(example_date) 格式化了该列,但这似乎只适用于“日期时间”列
谁能帮忙?
添加信息:
DEP_EVENTS:
DATA_REGION (varchar(50), not null)
EVENT_ID(PK, bigint, not null)
EVENT_NAME(varchar(200), not null)
FORECAST_STATUS(varchar(50), not null)
FORECAST_CYCLE(date, not null)
data_up <- data.frame(DATA_REGION = "America",
EVENT_NAME = "shiny deal",
FORECAST_STATUS = "Plan of Record",
FORECAST_CYCLE = as.Date("2017-07-07"))
DBI::dbWriteTable(con_poc, "DEP_EVENTS", data_up, overwrite=FALSE, append = TRUE, verbose = TRUE, rownames = FALSE)
Error in result_insert_dataframe(rs@ptr, values) :
nanodbc.cpp:1587: 22003: [Microsoft][ODBC SQL Server Driver]Numeric value out of range
我没有插入主键,因为我尝试这样做时收到以下错误
Error in result_insert_dataframe(rs@ptr, values) :
nanodbc.cpp:1587: 23000: [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot insert explicit value for identity column in table 'DEP_EVENTS' when IDENTITY_INSERT is set to OFF.
也应要求:
str(data_up)
'data.frame': 1 obs. of 4 variables:
$ DATA_REGION : Factor w/ 1 level "America": 1
$ EVENT_NAME : Factor w/ 1 level "shiny deal": 1
$ FORECAST_STATUS: Factor w/ 1 level "Plan of Record": 1
$ FORECAST_CYCLE : Date, format: "2017-07-07"
我也尝试将因子列更改为字符,但错误没有变化。
【问题讨论】:
-
您可以尝试使用
format(example_date, format = "%Y-%m-%d")格式化您的日期对象吗? -
试过了,但它给出了同样的错误,它将列转换为字符类型?
-
我通常使用
RODBCext而不是DBI,并且在最近的版本之前需要将日期和日期时间转换为字符串。不知道DBI是不是类似。 -
你试过
as.Date()吗? -
我刚刚尝试使用
odbc和RSQLServer包连接到SQL Server 发布的代码,在这两种情况下都可以正常工作。你用的是哪个包?哪个操作系统?哪个版本的 SQL Server?
标签: r sql-server odbc r-dbi