我在R中执行SQL Server 2008存储过程时遇到问题.R中的执行如下:
library(RODBC)
dbhandle <- odbcDriverConnect('driver={SQLServer};server=xxx;database=xxx;trusted_connection=true')
data <-sqlquery(dbhandle, "EXEC ihshsf35.FPR_GET_PF10 @tipo_pes='F' , @date_process='2016-11-30'")
odbcCloseAll()
R中出现的错误:
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
存储过程调用特征和日期以从数据库中提取信息:
Procedure [ihshsf35].[FPR_GET_PF10]
(
@tipo_pes varchar(1),
@date_process as datetime
)
AS
BEGIN
我从SAS和SPSS等其他系统执行此存储过程时没有遇到任何问题,但是当我尝试使用R时出现错误。注意:在SQL服务器中,数据的格式为“aaaa-mm-dd”,与我在R中询问的格式相同
任何人都可以帮我解决R中的问题吗?
提前致谢
最后,我看到问题是什么以及如何解决它。需要使用参数as.is=T
和函数sqlExecute
:
data <- sqlExecute(dbhandle, "exec FPR_GET_PJ @tipo_pes='J', @date_process='2016-12-31'",
fetch = TRUE, as.is=T)
你愿意尝试以下吗?
@date_process
期待一个日期时间值,但我不认为这会产生太大的影响。我之所以选择使用RODBCext
是因为1)从SQL注入更安全,2)使用单引号('
)让我对SQL更加头痛,而不是重新计算。
library(RODBCext)
dbhandle <- odbcDriverConnect('driver={SQLServer};server=xxx;database=xxx;trusted_connection=true')
data <-sqlExecute(dbhandle,
"EXEC ihshsf35.FPR_GET_PF10 @tipo_pes=? , @date_process=?",
data = list(tipo_pes = 'F',
date_process = '2016-11-30 00:00:00'),
fetch = TRUE)
odbcCloseAll()
在单引号问题上,同样值得尝试逆转单引号和双引号。所以'EXEC ihshsf35.FPR_GET_PF10 @tipo_pes = "F", @date_process = "2016-11-30"'
。