【问题标题】:My R code is not fetching data from SQL Server我的 R 代码没有从 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 中的第一条语句。
  • @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
  • 已经很晚了,但是,如果我有这样的查询,我肯定会创建一个存储过程来代替。

标签: sql-server r


【解决方案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)

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

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

【讨论】:

  • 我确实从一个如此简单的查询开始,它确实有效。只有这种类型的查询不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2012-03-13
相关资源
最近更新 更多