在Excel电子表格中的sql Query中多次使用参数

时间:2016-03-30 23:21:34

标签: sql sql-server excel parameters

我试图在SQL查询中多次使用从Excel电子表格中获取的参数,而且我找不到任何简单的解决方案,而我认为它不应该那么复杂。我在SQL服务器上工作。

让我解释一下。我有一个名为DONNEES_CNA的表,其列为开始时间(STARTIME),结束时间(ENDTIME)和吨位(TONNAGE)。它给出了在开始时间和结束时间之间进入输送机的吨位(吨)。

我们说我每小时都有数据。开始时间将与'2016-03-01 10:00:00'相同,结束时间则为'2016-03-01 10:59:59'

因此,如果我想要两个日期/小时之间的吨位,我的SQL查询就像:

DECLARE @DEBUT DATETIME, @FIN DATETIME
SET @DEBUT = '2016-03-01 09:00:00'
SET @FIN = '2016-03-01 12:30:00'

SELECT  CASE    WHEN STARTTIME >= @DEBUT AND ENDTIME <= @FIN THEN TONNAGE
        WHEN STARTTIME >= @DEBUT AND ENDTIME > @FIN THEN (TONNAGE)*DATEDIFF(SECOND, STARTTIME, @FIN)/DATEDIFF(SECOND, STARTTIME, ENDTIME)
        WHEN STARTTIME < @DEBUT AND ENDTIME <= @FIN THEN (TONNAGE)*DATEDIFF(SECOND, @DEBUT, ENDTIME)/DATEDIFF(SECOND, STARTTIME, ENDTIME)
        WHEN STARTTIME < @DEBUT AND ENDTIME > @FIN THEN (TONNAGE)*DATEDIFF(SECOND, @DEBUT, @FIN)/DATEDIFF(SECOND, STARTTIME, ENDTIME)
    END 
AS TONNAGE
FROM DONNEES_CNA

它可能根本没有优化,是从一个更大的查询中提取出来的,只是我所拥有的一个例子;我的想法只是我多次使用两个参数。

它在SQL Server上运行正常,在SSRS上,但我不能在Excel上执行。我只想直接从我的电子表格中获取@DEBUT@FIN

我尝试了SET @DEBUT = ?@FIN的同意,但这并不起作用。我把查询放在SET NOCOUNT ON的顶部,但两者都没有。第一个错误是(抱歉我的Excel是法语):&#34;参数号无效&#34;。

我接着回答了这个既不工作的事情(或者我做错了?) :How to add parameters to an external data query in Excel which can't be displayed graphically?

我找到了这个,但处理每个参数太长了: how to pass parameters to query in SQL (Excel)

每次我有参数并在Excel中定义每个参数时,唯一的解决方案是放置?吗?我的查询可能很长,这些参数可能会出现几百次......

我不是不愿意使用VBA,只要有一个解决方案不会让我在我的参数所在的相同A2和B2单元格上点击一百次。

如果已经有了这个案例的答案,请原谅我,我已经搜索了很长时间没有成功。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我刚刚阅读了有关存储过程的内容,我没有考虑过,这实际上可能是一个真正的解决方案,并且可以执行exec procedure_CNA ?, ?之类的操作。

这只是意味着在存储过程中传递每个查询。如果只有Excel解决方案,我更感兴趣!