我的 R 代码没有从 SQL Server 获取数据

Posted

技术标签:

【中文标题】我的 R 代码没有从 SQL Server 获取数据【英文标题】:My R code is not fetching data from SQL Server 【发布时间】:2016-08-10 17:38:31 【问题描述】:

虽然 R 上使用的普通 Select 语句正在获取数据,但我无法在以下查询中使用 SQL 获取数据: SQL 部分正在 SQL Server 2008 上运行。另外,我正在使用 RStudio 有什么建议吗?

qf<-sqlQuery(mycon,"USE MDM_STAT
+ DECLARE @RUNMONTH INT;
+              DECLARE @RUNYEAR INT;
+              DECLARE @PERIOD INT;
+              DECLARE @FISCALRUNYEAR INT;
+              DECLARE @FISCALRUNYEAR_BEGIN INT;
+              SET @RUNMONTH=MONTH(GETDATE());
+              SET @RUNYEAR=YEAR(GETDATE());
+              SET @PERIOD=
+              CASE 
+              WHEN @RUNMONTH>3 THEN (@RUNMONTH-3)
+              ELSE 9+@RUNMONTH
+              END
+              ;
+              SET @FISCALRUNYEAR=
+              CASE
+              WHEN @RUNMONTH>3 THEN @RUNYEAR
+              ELSE @RUNYEAR-1
+              END
+              ;
+              SET @FISCALRUNYEAR_BEGIN=
+              CASE
+              WHEN @PERIOD=12 THEN @FISCALRUNYEAR
+              ELSE @FISCALRUNYEAR-1
+              END
+              ;
+              
+              select * from dbo.TEMP_CUST_OPERATING_PROFIT OP
+              where OP.Sales_Year=@FISCALRUNYEAR
+              AND OP.PERIOD<=@PERIOD
+              UNION
+              select * from dbo.TEMP_CUST_OPERATING_PROFIT OP
+              where OP.Sales_Year=@FISCALRUNYEAR_BEGIN
+              AND OP.PERIOD>@PERIOD")

【问题讨论】:

您需要 SET NOCOUNT ON; 作为 SQL 中的第一条语句。 RODBC command 'sqlQuery' has problems with table variables in t-SQL的可能重复 @nrussell 使用该命令,如果我使用 SET NOCOUNT ON,我会收到以下错误:> qf [1] "42000 195 [Microsoft][SQL Server Native Client 10.0][SQL Server]' No' 不是公认的 SET 选项。” [2] "[RODBC] 错误:无法执行 SQLExecDirect @nrussell.. 使用 SET NOCOUNT ON 时出现以下错误; > qf [1] "42000 195 [Microsoft][SQL Server Native Client 10.0][SQL Server]'No' 不是可识别的 SET 选项。" [2] "[RODBC] 错误:无法执行 SQLExecDirect 已经很晚了,但是,如果我有这样的查询,我肯定会创建一个存储过程来代替。 【参考方案1】:

我建议您按照以下步骤操作:

1) 您应该确保连接字符串设置正确,以便与数据库建立正确的连接。 这里有一个很好的解释:short youtube tutorial

2) 在 R 中写:

library(RODBC)   
channel = odbcConnect("The_database_name_your_are_connecting_to")
...
sqlQuery(channel ,"your query here")
close(channel)

我建议你从最简单的查询开始,在你确定它有效之后, 使用更复杂的查询

希望它对你有用,祝你好运!

【讨论】:

我确实从一个如此简单的查询开始,它确实有效。只有这种类型的查询不起作用

以上是关于我的 R 代码没有从 SQL Server 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

无法从 R 中的 DF 更新 SQL Server 中的值

从SQL Server中的周数获取周开始日期和周结束日期

SQL Server R 多个结果集

如何从 SQL Server 中的日期获取月份编号(不是月份名称)?

如何使用 Sql Server 2008 获取用于插入到 select 中的 scope_identity 列表?

SQL Server 没有获取日期格式 dd-mm-yyyy