Sql 如何在参数中传递聚合类型?
我想创建一个存储过程,在这里我接收(可以是varchar或其他可以工作的东西)聚合函数(SUM、MIN、MAX、STD等) 显然这不起作用。我怎样才能让它工作?在文献中找不到这样的例子Sql 如何在参数中传递聚合类型?,sql,tsql,Sql,Tsql,我想创建一个存储过程,在这里我接收(可以是varchar或其他可以工作的东西)聚合函数(SUM、MIN、MAX、STD等) 显然这不起作用。我怎样才能让它工作?在文献中找不到这样的例子 谢谢 即使这看起来很有限,哈博的建议也会是这样的: CREATE PROCEDURE test @aggregType varchar(5) AS BEGIN SELECT CASE @aggregType WHEN 'SUM' THEN SUM(column1)
谢谢 即使这看起来很有限,哈博的建议也会是这样的:
CREATE PROCEDURE test
@aggregType varchar(5)
AS BEGIN
SELECT CASE @aggregType
WHEN 'SUM' THEN SUM(column1)
WHEN 'MIN' THEN MIN(column1)
WHEN 'MAX' THEN MAX(column1)
WHEN 'AVG' THEN AVG(column1)
END as column1Aggregated,
timestamp_local
FROM test_table
GROUP BY timestamp_local
ORDER BY timestamp_local
END
GO
这绝对不是动态的。这似乎不是个好主意。无论如何,为了让它工作,您需要动态SQLI来验证输入,但基本上是动态sql:&为什么不呢?最佳做法是什么?有一个聚合类型的过程(难以维护)?只执行聚合听起来是更好的选择,为什么需要使用sp?这个例子很简单,但实际的存储过程非常复杂,所以对我来说,作为存储过程(封装)是有意义的。我还听说,即使对于小型存储过程,DB也会通过预先了解它们的工作来优化它们,作为始终直接查询的替代方法。
CREATE PROCEDURE test
@aggregType varchar(5)
AS BEGIN
SELECT CASE @aggregType
WHEN 'SUM' THEN SUM(column1)
WHEN 'MIN' THEN MIN(column1)
WHEN 'MAX' THEN MAX(column1)
WHEN 'AVG' THEN AVG(column1)
END as column1Aggregated,
timestamp_local
FROM test_table
GROUP BY timestamp_local
ORDER BY timestamp_local
END
GO