【问题标题】:What type is this: ISNULL(SUM(COALESCE (a.currency, 0)), 0)这是什么类型:ISNULL(SUM(COALESCE (a.currency, 0)), 0)
【发布时间】:2010-08-11 17:06:12
【问题描述】:

我有以下一段 sql 查询:

Sql += " SELECT     ISNULL(SUM(COALESCE (a.currency, 0)), 0) AS monthCurrency              
FROM          IW_Awards AS a ";

查询工作正常,我在提交查询后尝试在 C# 中转换此值,但我找不到它是什么类型。

我试过int,int?和字符串。当我尝试转换为字符串时,出现以下错误消息: 无法将“System.Decimal”类型的对象转换为“System.String”类型。

当我尝试将其转换为 Int 或 Int 时?我有: 指定的演员表无效。

数据库:SQL IDE:Visual Studio 2010 数据库接口:LINQ(但我正在创建自己的查询) 服务器端语言:C#

感谢您的帮助。

【问题讨论】:

    标签: c# .net sql visual-studio


    【解决方案1】:

    你试过十进制吗?当您尝试将 System.Decimal 转换为字符串时,它告诉您它正在尝试将其转换为字符串。

    它将返回货币类型。

    【讨论】:

      【解决方案2】:

      a.currency 是什么类型?我会说这可能是您的错误消息中的十进制数据类型。

      出于好奇,为什么要使用 coalesce 和 isnull?由于您已经将所有 null 值更改为 0,因此您根本不需要外部 isnull。

      【讨论】:

      • 如果表中没有行,即使使用内部 COALESCE,您仍然会得到 NULL。
      • a.currency 在 Sql 中是小数(4, 0),它解决了我知道的问题,谢谢:)
      • @Tom H. 我想这是真的,但我个人不习惯查询没有记录的表。在这种情况下,您应该保持一致并使用两次 coalesce 或两次 isnull。
      • @gbn:嗯,他的代码不包含 GROUP BY。因此,您将获得一个 NULL 行。我的评论是对 HLGEM 的回应。如果我一直在回复您的评论,那么我会这么说。如果不清楚,我很抱歉。
      • @Tom H:呃,我的错。对不起。给我的备忘录:发帖前请阅读并理解
      【解决方案3】:

      听起来像是小数。这就是错误消息告诉您的内容,您正在尝试将小数转换为字符串。

      【讨论】:

        【解决方案4】:

        在我看来,结果是 decimal,基于指定它无法从 System.Decimal 转换的错误消息。

        【讨论】:

          【解决方案5】:

          正如其他人提到的,您正在寻找的是 decimal,但我想将此 link 添加到 CLR-SQL 类型映射文档中(非常有用的链接)。

          【讨论】:

            【解决方案6】:

            如果 currency 是数据库中的 int,则使用 Convert.ToInt32。另一种选择是使用来自System.Data 命名空间的myTable.Rows[0].Field<int>("monthCurrency")。问题是有时即使您从 SqlServer 返回一个 int,.NET 仍然认为它是小数。

            【讨论】:

              猜你喜欢
              • 2020-03-24
              • 2016-12-16
              • 2017-03-12
              • 2022-12-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-02-18
              相关资源
              最近更新 更多