Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql “;”附近的语法不正确。期待对话_Sql_Sql Server_Stored Procedures_Etl - Fatal编程技术网

Sql “;”附近的语法不正确。期待对话

Sql “;”附近的语法不正确。期待对话,sql,sql-server,stored-procedures,etl,Sql,Sql Server,Stored Procedures,Etl,我试图在SQL中执行一个R-dplyr脚本,作为ETL存储过程的一部分。R代码和SQL查询似乎都是成功的,我相信问题在于尝试操作输出时 我被抛出的错误包括以下错误:“;”附近的语法不正确。期待对话 此结构的来源是: 您需要在CTE语句前面加上;。所以应该有一个,;在EXECUTE sp_EXECUTE_EXECUTE_外部_脚本的结尾之间。。。陈述和结果 事实上,每一句话都应该以一个字母结尾;但大多数情况下,SQL Server都能想出没有它该怎么办。但是With as CTE可能会与其他语句混

我试图在SQL中执行一个R-dplyr脚本,作为ETL存储过程的一部分。R代码和SQL查询似乎都是成功的,我相信问题在于尝试操作输出时 我被抛出的错误包括以下错误:“;”附近的语法不正确。期待对话

此结构的来源是:


您需要在CTE语句前面加上;。所以应该有一个,;在EXECUTE sp_EXECUTE_EXECUTE_外部_脚本的结尾之间。。。陈述和结果


事实上,每一句话都应该以一个字母结尾;但大多数情况下,SQL Server都能想出没有它该怎么办。但是With as CTE可能会与其他语句混淆,因为With关键字用作其他类型语句的一部分

我注意到,在您的结构源代码中,作者在其查询的顶部定义了一个测试表。他使用“GO”命令执行此操作,然后开始他的程序。存储过程上方没有这样的进程,因此查询末尾的end语句是多余的。移除它,看看会发生什么

EXECUTE sp_execute_external_script @language = N'R'
    , @script = N'
    rm(list = ls(all.names = TRUE))
library(dplyr)
library(tidyr)
library(rlang)
library(lubridate)
        OutputDataSet <- InputDataSet %>% mutate(Date=as.Date(effective)) %>% select(-effective) %>%
  group_by(rowno_dmddmhi_dmd) %>%
  tidyr::complete(Date = seq.Date(min(Date), max(Date), by="day"))%>% fill(balance)%>% 
  mutate(amount = ifelse(is.na(amount), 0, amount))%>%mutate(opp_amount = amount * -1) %>%
  arrange(rowno_dmddmhi_dmd,desc(Date)) %>% group_by(rowno_dmddmhi_dmd) %>%
  mutate(cumsum = cumsum(opp_amount))%>%group_by(rowno_dmddmhi_dmd)%>%
  mutate(balance.at.date=balance + cumsum)%>%ungroup() %>% mutate(Report_Date=as.Date(Date)-1)%>%select(rowno_dmddmhi_dmd,Date,balance.at.date,Report_date);'
    , @input_data_1 = N'SELECT data_.rowno_dmddmhi_dmd,
       dmd.balance,
       Sum(data_.amount) AS amount,
       data_.effective
FROM   (
       --Top False Cap 
       SELECT dmhi.rowno,
              dmhi.rowno_dmddmhi_dmd,
              0                               AS amount,
              CONVERT(Date, Getdate()) AS effective
       FROM   ks208.dbo.dmd
              INNER JOIN dmon208.dbo.dmhi
                      ON dmd.rowno = dmhi.rowno_dmddmhi_dmd
       UNION
       SELECT dmhi.rowno,
              dmhi.rowno_dmddmhi_dmd,
              dmhi.amount,
              CONVERT(Date, dmhi.effective) AS effective
       FROM   ks208.dbo.dmd
              INNER JOIN ks208.dbo.dmhi
                      ON dmd.rowno = dmhi.rowno_dmddmhi_dmd
       UNION
       SELECT dmhi.rowno,
              dmhi.rowno_dmddmhi_dmd,
              dmhi.amount,
              CONVERT(Date, dmhi.effective) AS effective
       FROM   dmon208.dbo.dmd
              INNER JOIN dmon208.dbo.dmhi
                      ON dmd.rowno = dmhi.rowno_dmddmhi_dmd
        -- False Bottom Cap
        UNION
        SELECT dmhi.rowno,
               dmhi.rowno_dmddmhi_dmd,
               0                                                  AS amount,
               CONVERT(Date, Dateadd(year, -4, Getdate())) AS effective
        FROM   ks208.dbo.dmd
               INNER JOIN dmon208.dbo.dmhi
                       ON dmd.rowno = dmhi.rowno_dmddmhi_dmd) AS data_
       INNER JOIN ks208.dbo.dmd
               ON dmd.rowno = data_.rowno_dmddmhi_dmd
WHERE  Year(data_.effective) >= Year(Getdate()) - 4


GROUP  BY data_.rowno_dmddmhi_dmd,
          data_.effective,
          dmd.balance  
'

    with RESULT sets (("rowno_dmddmhi_dmd" int not null, "Date" Date not null, "balance.at.date" float not null, "Report_date" Date not null ));
    end;