有没有一种方法可以编写强类型的 SQL Server 存储过程(即返回已知的列结果集)并使其组语句是动态的。
就像是:
SELECT SUM( Column0 ) FROM Table1
GROUP BY @MyVar
我也尝试了以下方法:
SELECT SUM( Column0 ) FROM Table1
GROUP BY CASE @MyVar WHEN 'Column1' THEN Column1 ELSE Column2
第二条语句仅适用于Column1和Column2的db类型相同的场景。如果不是,SQL 引擎会抛出类似以下内容的错误:“将 nvarchar 值“SYSTEM”转换为数据类型 [不同类型] 时,转换失败。”
我该怎么做才能获得强大的结果集,同时又拥有一些动态部分 - 即我的例子中的石斑鱼?这将暴露给 LINQ。
EDIT:
看起来你可以做到,但你不应该这样做!绝对是矫枉过正。测试显示执行计划慢了数千倍。结果集越大,它只会变得更慢。
您可以对可能有用的常量进行分组
SELECT
SUM(Column0),
CASE @MyVar WHEN 'Column1' THEN Column1 ELSE '' END AS MyGrouping
FROM
Table1
GROUP BY
CASE @MyVar WHEN 'Column1' THEN Column1 ELSE '' END
编辑:对于数据类型不匹配和多个值,这允许您对两列进行分组...
SELECT
SUM(Column0),
CASE @MyVar WHEN 'Column1' THEN Column1 ELSE NULL END AS Column1,
CASE @MyVar WHEN 'Column2' THEN Column2 ELSE NULL END AS Column2
FROM
Table1
GROUP BY
CASE @MyVar WHEN 'Column1' THEN Column1 ELSE NULL END,
CASE @MyVar WHEN 'Column2' THEN Column2 ELSE NULL END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)