Sql server 存储过程的执行失败

Sql server 存储过程的执行失败,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我对下面的程序有异议 错误是: Msg 402,16级,状态1,程序获取格式化银行对账单,第行 87在减法运算符中,数据类型nvarchar和nvarchar不兼容 更改这些声明: @NewBalance nvarchar(150), @PreviousBalance nvarchar(150); 到 感谢大家的支持和分享 我能够克服这个问题,通过将我有小数点18,2的所有区域的数据类型更改为money。变量@OpeningBalance Decimal18,2被更改为@OpeningBa

我对下面的程序有异议

错误是:

Msg 402,16级,状态1,程序获取格式化银行对账单,第行 87在减法运算符中,数据类型nvarchar和nvarchar不兼容

更改这些声明:

@NewBalance nvarchar(150),  
@PreviousBalance nvarchar(150);


感谢大家的支持和分享

我能够克服这个问题,通过将我有小数点18,2的所有区域的数据类型更改为money。变量@OpeningBalance Decimal18,2被更改为@OpeningBalance money

对@DebitRecord、@CreditRecord、@NewBalance、@PreviousBalance也是如此


同样,“合并”用于计算新余额,方法是合并以前的余额、贷记记录和借记记录。

为什么数字存储为字符串?正如您所发现的,这只会导致问题。最好对货币类型的值使用至少四位小数,因此我建议使用小数20,4,以符合OP可能过度使用小数18,2的情况。
@NewBalance nvarchar(150),  
@PreviousBalance nvarchar(150);
@NewBalance DECIMAL(10,2),  
@PreviousBalance DECIMAL(10,2);