Sql 如何在参数中传递聚合类型?

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)

我想创建一个存储过程,在这里我接收(可以是varchar或其他可以工作的东西)聚合函数(SUM、MIN、MAX、STD等)

显然这不起作用。我怎样才能让它工作?在文献中找不到这样的例子


谢谢

即使这看起来很有限,哈博的建议也会是这样的:

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