在R中执行SQL Server存储过程

问题描述 投票:5回答:2

我在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中的问题吗?

提前致谢

sql-server r stored-procedures
2个回答
2
投票

最后,我看到问题是什么以及如何解决它。需要使用参数as.is=T和函数sqlExecute

data <- sqlExecute(dbhandle, "exec FPR_GET_PJ  @tipo_pes='J', @date_process='2016-12-31'", 
                   fetch = TRUE, as.is=T)

1
投票

你愿意尝试以下吗?

@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"'

© www.soinside.com 2019 - 2024. All rights reserved.