Почему табличная переменная SQL не возвращает значения в R Markdown?

Не могу понять, почему R Markdown не возвращает значения для табличной переменной SQL? Я использую блокнот в R Studio.

Например:

declare @CountriesTable as TABLE (countries varchar(2))
        insert into @CountriesTable values ('us'), ('gb'), ('de'), ('fr')
 
 select * from @CountriesTable

в MSSMS возвращается

введите здесь описание изображения

В R Markdown я получаю 0 строк:

введите здесь описание изображения


person Dmitri    schedule 04.11.2020    source источник
comment
Я не проверял это, но вам нужен ; после строки insert into?   -  person r2evans    schedule 06.11.2020
comment
@r2evans Я пробовал ; для обеих строк после declare и insert into, это не работает...   -  person Dmitri    schedule 07.11.2020
comment
Как выяснилось в результате исследования вопросов других людей, пакет DBI, похоже, не работает с нечисловыми данными T-SQL INSERT INTO.   -  person Dmitri    schedule 07.11.2020


Ответы (1)


  1. Ваше утверждение не работает с нечисловыми данными совершенно неверно, DBI (с SQL Server) поддерживает варианты SQL Server bit, integer, float, варианты datetimeoffset, варианты char/varchar/nchar/nvarchar и т. д. .

  2. Предлагается здесь добавить SET NOCOUNT ON.

Демонстрация:

---
title: Why table variable SQL doesn't return values in R Markdown?
---

```{r setup}
library(DBI)
con <- DBI::dbConnect(odbc::odbc(), ...) # redacted
```

```{sql connection=con}
set nocount on
declare @CountriesTable as TABLE (countries varchar(2))
insert into @CountriesTable values ('us'), ('gb'), ('de'), ('fr')
select * from @CountriesTable
```

рендеринг rmarkdown

В конечном счете, я считаю, что проблема в том, что DBI не работает с несколькими наборами результатов. Хотя я ожидал, что PR 345 от odbc решит эту проблему в odbc-1.3. .0, похоже, он неправильно обрабатывает первый набор результатов (4, количество вставленных строк) и второй (четыре строки данных).

person r2evans    schedule 07.11.2020
comment
Когда вы убедитесь, что это работает хорошо (не торопитесь), вернитесь и примите этот ответ. Спасибо! - person r2evans; 08.11.2020