我在Visual Studio报表服务项目中将参数作为字段名称传递时遇到问题。这是我的SQL语句:
SELECT cast(SUM(@Month) as numeric(36,2))
FROM v_financials
WHERE GMOBJ_Object_Account > 0 AND GMOBJ_Object_Account < 100
AND
GMCO_Company LIKE '%' + @Company + '%'
AND
GBLT_Ledger_Type LIKE '%' + @LedgerType + '%'
AND
GMR001_Bill_Item_Code LIKE '%' + @BillItemCode + '%'
AND
MCRP01_Division LIKE '%' + @Division + '%'
AND
GBFY_Fiscal_Year LIKE '%' + @FiscalYear + '%'
@Month是给我带来麻烦的部分。我一直收到SUM无法应用于nvarchar的错误。我不明白为什么我会收到此错误,因为当我传递字段名称时它正常运行,这也是一个字符串。
答案 0 :(得分:4)
正如我在评论中所说,你不能直接在SQL上使用变量作为列名(在这种情况下,你不能做SUM(@Month)
,除非你想要对该变量的值求和) 。您可以使用动态SQL或构造CASE
表达式:
SELECT cast(SUM(CASE @Month WHEN 'January' THEN January
WHEN 'February' THEN February.....) as numeric(36,2))
FROM v_financials
WHERE GMOBJ_Object_Account > 0 AND GMOBJ_Object_Account < 100
AND
GMCO_Company LIKE '%' + @Company + '%'
AND
GBLT_Ledger_Type LIKE '%' + @LedgerType + '%'
AND
GMR001_Bill_Item_Code LIKE '%' + @BillItemCode + '%'
AND
MCRP01_Division LIKE '%' + @Division + '%'
AND
GBFY_Fiscal_Year LIKE '%' + @FiscalYear + '%'
我假设@Month
的值和列名称(您需要为所有值完成CASE
。)
答案 1 :(得分:0)
以下是您需要如何编写查询以及如何执行查询的示例
答案 2 :(得分:0)