【发布时间】:2020-08-21 19:53:45
【问题描述】:
我需要参数化我的查询,以便 FM 在 IN PIVOT 中获取作为参数传递的值:enter code here
这是有效的:
ALTER PROCEDURE [dbo].[sp_Head]
@fiscalYear int,
@fiscalMonth int
AS
SELECT *
FROM
(SELECT tblrB.Company, tblrB.FM, tblrB.Amount
FROM tblrB
WHERE tblrB.FY = @fiscalYear
AND tblrB.FM = @fiscalMonth
GROUP BY tblrB.CompanyCd, tblrB.Cd, tblrB.FM, tblrB.Amount) t
PIVOT
(SUM(Amount) FOR FM IN ([12]) --12 AS EXAMPLE) p;
但不是这不是:
ALTER PROCEDURE [dbo].[sp_Head]
@fiscalYear int,
@fiscalMonth int
AS
SELECT *
FROM
(SELECT tblrB.Company, tblrB.FM, tblrB.Amount
FROM tblrB
WHERE tblrB.FY = @fiscalYear AND tblrB.FM = @fiscalMonth
GROUP BY tblrB.Company, tblrB.Cd, tblrB.FM, tblrB.Amount) t
PIVOT
(SUM(Amount) FOR FM IN ([@fiscalMonth ])) p;
【问题讨论】:
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
为什么
t里面有一个GROUP BY,为什么它的列列表与SELECT列表不匹配,为什么它会包含FM/Amount?它不可能像写的那样工作。
标签: sql-server stored-procedures parameters pivot