我想从R中的函数调用存储过程。请参阅下面的代码。不幸的是,这个代码只生成一个没有值的数据框。我想解决这个问题RJDBC
& DBI
,因为RODBC
似乎有问题。R,用RJDBC调用SQL Server存储过程
RPT_09_Hourly_Connected_v3<- function(Year, Month="NULL",State = "NULL",Region="NULL", City="NULL", District="NULL", Subdistrict="NULL" ,Address='NULL'){
drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver", "/opt/sqljdbc_3.0/sqljdbc4.jar")
conn <- DBI::dbConnect(drv, "jdbc:sqlserver://***;databaseName=***;user=***;password=***")
sqlText <- paste("exec [dbo].[RPT_09_Hourly_Connected_v3]@Year=",Year,
",@Month=",Month,
",@State=",State,"",
",@Region=",Region,"",
",@City=N'",City,"'",
",@District=",District,"",
",@Subdistrict=",Subdistrict,"",
",@Address=N'",Address,"'",
sep="")
data <- RJDBC::dbGetQuery(conn,sqlText)
}
a<- RPT_09_Hourly_Connected_v3(Year = 2016)
> str(a)
'data.frame': 0 obs. of 9 variables:
$ Regio : chr
$ Stad : chr
$ Stadsdeel : chr
$ Buurtcombinatie: chr
$ Adres : chr
$ Jaar : num
$ Maand : num
$ hourNR : num
$ HoursConnected : num
在RODBC
坠毁之前,这工作对我来说。 RODBC
和RJDBC
之间有什么区别?
RPT_09_Hourly_Connected_v3<- function(Year, Month="NULL",State = "NULL",Region="NULL", City="NULL", District="NULL", Subdistrict="NULL" ,Address='NULL'){
dbhandle <- odbcConnect("***;DATABASE=***;UID=***;PWD=***")
data <- sqlQuery(dbhandle,paste("exec [ dbo].[RPT_09_Hourly_Connected_v3]@Year=",Year,
",@Month=",Month,
",@State=",State,"",
",@Region=",Region,"",
",@City=N'",City,"'",
",@District=",District,"",
",@Subdistrict=",Subdistrict,"",
",@Address=N'",Address,"'",
sep=""))
odbcCloseAll()
data
}
如果我的手在SQL Server中执行存储过程会是这样的:
EXEC @return_value = [dbo].[RPT_09_Hourly_Connected_v3]
@Year = 2016,
@Month = NULL,
@State = NULL,
@Region = NULL,
@City = N'Amsterdam',
@District = NULL,
@Subdistrict = NULL,
@Address = NULL
感谢您的阅读!我希望有人能帮助我!
的Martijn
在'',@ City = N'',City,''“'的行中,应该在那里吗?例如,我认为SQL将读取该命令为“@ City = N'Detroit”。我很惊讶你的编码不会返回错误。你在地址栏中有同样的事情。这是一个我不熟悉的变量类型吗? – Benjamin
这正是我想要它在SQL中:) –