4

我正在尝试在 knitr SQL 块中使用创建的变量。我正在尝试使用创建变量,Sys.getenv("USERNAME")因为它用作模式名称的一部分。我当前的代码如下所示:

```{r}
library(tidyverse)
library(lubridate)
library(dbplyr)
library(DBI)

con <-
DBI::dbConnect(odbc::odbc(), 
  .connection_string = 'driver={SQL Server};
  server=server;
  database=db1;
  trusted_connection=true')

BEGINMONTH <- "01JUN16"
ENDMONTH <- "01JUL16"
```

```{SQL, connection=con}
DROP TABLE [SANDBOX_DB].[ORG\USERNAME].TEMP

SELECT VAR1, VAR2, VAR3
  INTO [SANDBOX_DB].[ORG\USERNAME].TEMP
  FROM [DB1].TABLE
  WHERE DATE BETWEEN ?BEGINMONTH AND ?ENDMONTH
```

我想在第一个块中有一个额外的变量,如下所示:

schema <- paste0("[SANDBOX_DB].[ORG\\", Sys.getenv("USERNAME"), "]")

所以最终的代码应该是这样的:

```{r}
library(tidyverse)
library(lubridate)
library(dbplyr)
library(DBI)

con <-
DBI::dbConnect(odbc::odbc(), 
  .connection_string = 'driver={SQL Server};
  server=server;
  database=db1;
  trusted_connection=true')

BEGINMONTH <- "01JUN16"
ENDMONTH <- "01JUL16"
schema <- paste0("[SANDBOX_DB].[ORG\\", Sys.getenv("USERNAME"), "]")
```

```{SQL, connection=con}
DROP TABLE ?schema.TEMP

SELECT VAR1, VAR2, VAR3
  INTO ?schema.TEMP
  FROM [DB1].TABLE
  WHERE DATE BETWEEN ?BEGINMONTH AND ?ENDMONTH
```

我收到此错误,这似乎与将参数输入带引号的 SQL 块的方式有关。是否有另一种方法可以将用户名更改为 SQL 块?

Error: <SQL> 'DROP TABLE '[SANDBOX_DB].[ORG\USERNAME]'.TEMP 

SELECT DISTINCT VAR1, VAR2, VAR3
    INTO '[SANDBOX_DB].[ORG\USERNAME]'.TEMP
    FROM [DB1].TABLE
    WHERE DATE BETWEEN '01JUN16' AND '01JUL16'
'
  [Microsoft][ODBC SQL Server Driver][SQL 
Server]Incorrect syntax near '[SANDBOX_DB].[ORG\USERNAME]'. 
Failed to execute SQL chunk
4

0 回答 0