Kam*_*med 0 sql sql-server stored-procedures sql-server-2008
我试图运行以下sql server存储过程,我无法让它执行.过程查询是:
ALTER PROCEDURE [dbo].[get_StockNavigationReportData]
@startDate VARCHAR(200),
@endDate VARCHAR(200),
@groupBy VARCHAR(200)
AS
BEGIN
SELECT M.VRNOA, M.VRDATE 'DATE', M.REMARKS, D.qty 'QTY', g2.name 'Godown_2', g.name 'Godown_1'
FROM
Stockmain M, StockDetail D, GODOWN G, (
SELECT * FROM GODOWN
) AS g2
WHERE
M.Etype='navigation'
AND M.STID = D.STID
AND D.GODOWN_ID = G.GODOWN_ID
AND g2.godown_id = D.GODOWN_ID2
AND VRDATE BETWEEN CONVERT(VARCHAR, CAST(@startDate AS DATETIME),101)
AND CONVERT(VARCHAR, CAST(@endDate AS DATETIME), 101)
ORDER BY
@groupBy ASC
END
Run Code Online (Sandbox Code Playgroud)
而我得到的错误是:
消息1008,级别16,状态1,过程get_StockNavigationReportData,行25
由ORDER BY编号1标识的SELECT项包含一个变量,作为标识列位置的表达式的一部分.只有在引用列名的表达式进行排序时,才允许使用变量.
任何人都可以看看,告诉我我在这里做错了什么+我怎么能让这个工作?
您不能在order by
子句中使用变量.相反,你必须做以下事情:
order by (case when @groupBy = 'VRNOA' then VRNOA
. . .
end)
Run Code Online (Sandbox Code Playgroud)
但要小心,因为如果列的类型不同,可能会发生意外情况或可能会出现另一个错误.(有一种替代方法可以使用动态SQL,但我不建议这样做.)
此外,这个名字@groupby
有点误导."分组"是一个等同于"聚合"的SQL术语.会不会@OrderBy
或@SortBy
更合适?