I have a problem when I execute a SQL Server 2008 stored procedure in R. The execution in R follows as:
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()
The error that appears in R:
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
The stored procedure calls a characteristic and a date to extracts information from the database:
Procedure [ihshsf35].[FPR_GET_PF10]
(
@tipo_pes varchar(1),
@date_process as datetime
)
AS
BEGIN
I don´t have problems executing this stored procedure from other systems like SAS and SPSS, but when I try in R brings me a error. Note: In SQL server the data has the format "aaaa-mm-dd" the same I asking in R
Can anyone can help me with the problem in R?
Thanks in advance
Run using RCall getInputParameters to get a list of input parameter objects. Define a $query or set a $value for each input parameter. Use executeStoredProcedure to execute the stored procedure from the R development environment, passing the list of input parameter objects that you set.
Did you know that you can run SQL code in an R Notebook code chunk? To use SQL, open an R Notebook in the RStudio IDE under the File > New File menu. Start a new code chunk with {sql} , and specify your connection with the connection=con code chunk option.
In Object Explorer, connect to an instance of the SQL Server Database Engine, expand that instance, and then expand Databases. Expand the database that you want, expand Programmability, and then expand Stored Procedures. Right-click the user-defined stored procedure that you want and select Execute Stored Procedure.
Use executeStoredProcedure to execute a stored procedure defined as an StoredProcedure object. Call this function only when executing a stored procedure from R code.
Finally, I see what the problem was and how to solve it. Need to use the parameter as.is=T
with the function sqlExecute
:
data <- sqlExecute(dbhandle, "exec FPR_GET_PJ @tipo_pes='J', @date_process='2016-12-31'",
fetch = TRUE, as.is=T)
Would you be wiling to give the following a try?
@date_process
is expecting a date-time value, but I don't expect that would make much difference. I chose to use RODBCext
because 1) safer from SQL Injection, and 2) Using single quotes ('
) has led me into more headaches with SQL than I care to recount.
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()
On the single quote issue, it's also worth trying a reversal of your single and double quotes. So 'EXEC ihshsf35.FPR_GET_PF10 @tipo_pes = "F", @date_process = "2016-11-30"'
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With