【发布时间】:2019-03-07 13:39:55
【问题描述】:
我有以下简单的 SQL 服务器代码:
set nocount on;
if OBJECT_ID('tempdb..#A') IS NOT NULL DROP TABLE #A;
set nocount on;
create table #A
( obj_id int,
obj_name varchar(50),
obj_dt datetime);
insert into #A (
obj_id,
obj_name,
obj_dt)
values
( 1
,'name'
,'2019-01-01 00:00:00'
),
( 2
,NULL
,NULL
),
( 2
,'alias'
,'2019-02-01 00:00:00'
);
set nocount on;
if OBJECT_ID('tempdb..#B') IS NOT NULL DROP TABLE #B;
set nocount on;
select
#A.obj_id
,subq.obj_name
,subq.obj_dt
into #B
from #A
join (select
obj_id,
max(obj_name) as obj_name,
max(obj_dt) as obj_dt
from #A
group by obj_id) as subq
on #A.obj_id = subq.obj_id;
set nocount on;
select * from #B;
正如预期的那样,在 Microsoft SQL Server Management Studio 中执行时返回以下数据:
obj_id obj_name obj_dt
1 name 2019-01-01 00:00:00.000
2 alias 2019-02-01 00:00:00.000
2 alias 2019-02-01 00:00:00.000
到目前为止一切顺利。现在我希望从 R 运行此代码并将相同的输出返回到 R。我将上面的查询存储在字符串 query 和我的 RODBC 连接中存储在变量 connection 中,并尝试检索数据与
sqlQuery(connection,query)
结果是character(0)。 然而,如果我通过注释掉#B 定义中的subq.obj_name 和subq.obj_dt 字段来修改上面的查询,那么代码会成功返回预期的数据集
obj_id
1 1
2 2
3 2
来自R。
那么这里发生了什么?两个 sql 查询都有效并且在 Microsoft SQL Server 环境中成功运行,但只有一个在通过 R 管道时有效。我不知道是什么原因导致 RODBC 代码无法处理第二个查询。
【问题讨论】:
-
不是答案,但您绝对应该尝试通过您的 R 脚本从 SQL Server 获取错误输出。
-
通常,如果有错误消息,它将存储在输出变量中。在这种情况下,它只会产生
character(0),所以我认为没有实际错误,而是什么都没有返回?虽然不确定...
标签: r sql-server rodbc