DECLARE @V_FEE MONEY = 0.00
IF ISNULL(@V_FEE,'')=''
SELECT 'FAIL'
ELSE
SELECT 'PASS'
为什么它返回'FAIL'甚至我的费用金额为0.00。我在SQL Server中遇到了这个问题。
答案 0 :(得分:2)
我认为这种情况正在发生,因为你在isnull上使用了不同的类型,你传递了一种货币类型而你正在使用varchar作为默认值。如果您在ISNULL上使用相同类型,则会在选择时收到PASS答案。 试试这个:
DECLARE @V_FEE MONEY = 0.00
IF ISNULL(@V_FEE, -1) = -1
SELECT 'FAIL'
ELSE
SELECT 'PASS'
答案 1 :(得分:2)
当运算符组合了两个不同数据类型的表达式时,数据类型优先级的规则指定优先级较低的数据类型转换为具有较高优先级的数据类型。
答案 2 :(得分:1)
因为''
转换为金钱时会转换为0.0000
。
select convert(money,'')
返回:0.0000
declare @v_fee money = 0.00
if @v_fee is null
select 'fail'
else
select 'pass'
返回:pass
答案 3 :(得分:0)
试试这个:
DECLARE @V_FEE MONEY = NULL
IF ISNULL(@V_FEE,0.00) = 0.00
SELECT 'PASS'
ELSE
SELECT 'FAIL'
事实上,如果你尝试:
DECLARE @V_FEE MONEY = 0.00;
SELECT ISNULL(@V_FEE, 'AAA');
它返回:
0.00