[asp.net]'/' 应用程序中的服务器错误无法将 char 值转换为钱

标签: Asp.net SQLServer
发布时间: 2017/3/26 4:58:04
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我运行下列存储的过程。 结果集是绑定在 gridView 控件上。

@EmbossLine varchar(20),

@TransactionTypeID int,

@DateFrom datetime,

@DateTo datetime

AS

Select 

pt.TransactionDate,
m.MerchantName1,
pt.TerminalID,
pt.SequenceNumber,
tt.TransactionType,
case TT.TransactionTypeID when 0 then PT.TotalAmount else 'null' end 'PointsEarned',
case TT.TransactionTypeID when 2 then PT.TotalAmount else 'null' end 'PointsRedemeed'
from POS_Transactions PT 
inner join TransactionType TT on TT.TransactionTypeID = PT.TransactionTypeID
inner join CardBalance CB on CB.PAN = PT.PAN
inner join Terminal T on T.TerminalID = PT.TerminalID
inner join Merchant M on M.MerchantID = T.MerchantID
where 
(PT.TransactionDate>=@DateFrom and PT.TransactionDate<=@DateTo)
and (PT.TransactionTypeID = @TransactionTypeID or @TransactionTypeID ='-999')
and(PT.PAN=@EmbossLine or PT.PAN='-999')
order by PT.TransactionDate desc

其实我就是要做的是,好想打印 null 每当我 TransactionTypeID 并不等于 02 .但它将引发运行时异常

Cannot convert a char value to money. The char value has incorrect syntax.

我知道它是一个转换问题,想知道我的条件计算结果为 false 时,如何可以打印一些价值

解决方法 1:

更改以下两行︰

case TT.TransactionTypeID when 0 then PT.TotalAmount else 'null' end 'PointsEarned',
case TT.TransactionTypeID when 2 then PT.TotalAmount else 'null' end 'PointsRedemeed'

更改为︰

case TT.TransactionTypeID when 0 then PT.TotalAmount else null end 'PointsEarned',
case TT.TransactionTypeID when 2 then PT.TotalAmount else null end 'PointsRedemeed'

你想要产生 null 值在你 else 条件。你目前正在产生这个词 'null' 这是在哪里转换失败 — — 你无法转换这个词 ( char 数据类型) 'null' 为钱的数据类型。

编辑︰

您将需要将值转换为一个字符串来执行此操作。但这将意味着会不想向您的客户端返回货币数据类型,返回的字符串。

在客户端而不是 SQL Server,真的应该处理这样的事情。在任何尝试这一切转换为字符串︰

case TT.TransactionTypeID when 0 then Cast(PT.TotalAmount as varchar(50)) else 'null' end 'PointsEarned',
case TT.TransactionTypeID when 2 then Cast(PT.TotalAmount as varchar(50)) else 'null' end 'PointsRedemeed'
赞助商