0

我在 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 的错误。我不明白为什么会收到此错误,因为当我传递字段名称时它会正常运行,这也是一个字符串。

4

3 回答 3

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所有值)。

于 2013-05-24T13:57:32.487 回答
0

这是有关如何编写查询以及如何执行查询的示例

在 SELECT 语句中指定列名作为参数?

于 2013-05-24T13:55:01.847 回答
0

这就是我解决问题的方法:查询是针对 INFORMIX 数据库的:

SELECT * FROM vs_mant_expendedoras_01 
WHERE 
(CASE ? WHEN 'cardman' THEN cardman WHEN 'display' THEN display WHEN 'unit' THEN unit END)  = ?
AND fecha BETWEEN ? AND ?
ORDER BY date;

Report 参数是“文本”类型,可用值指定如下:

在此处输入图像描述 如上图所示,Wich 给了我一个不错的组合选择器。

于 2015-10-01T19:21:55.943 回答