我试图在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单元格上点击一百次。
如果已经有了这个案例的答案,请原谅我,我已经搜索了很长时间没有成功。
感谢您的帮助!
答案 0 :(得分:0)
我刚刚阅读了有关存储过程的内容,我没有考虑过,这实际上可能是一个真正的解决方案,并且可以执行exec procedure_CNA ?, ?
之类的操作。
这只是意味着在存储过程中传递每个查询。如果只有Excel解决方案,我更感兴趣!