我正在尝试在 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