将旧值从null更改为其他值时,数据不会出现

当我将值从0更改为null或反之时,Select语句未显示数据。 但是,当我将数据从0更改为1时,select语句开始显示数据。

请找到我的代码(查询)

declare @tmptable TABLE (Id INT,IsVal BIT)
INSERT Into @tmptable VALUES(1,0)
--SELECT * FROM @tmptable
DeclARE @Id INT
DeclARE @IsVal BIT

SET @Id=1
SET @IsVal=NULL

select @Id as PrimaryKeyValue,CAST(IsVal as VARCHAR) as OldValue,CAST(IsnULL(@IsVal,'') as VARCHAR) as NewValue,'IsVal' AS DisplayFieldName,CASE IsVal 
     WHEN 1 THEN 'Yes' 
     WHEN 0 THEN 'No'
     END  as DisplayOldValue,CASE  @IsVal 
      WHEN 1 THEN 'Yes'
      WHEN 0 THEN 'No'
     END  as DisplayNewValue   
from @tmptable WHERE Id =@Id and IsnULL(IsVal,'')<>IsnULL(@IsVal,'')

语句有问题:-

IsnULL(IsVal,'')

无法弄清楚我需要对上述语句进行的更改,以便我的查询可以按需要工作。请帮忙。

@IsVal变量用于设置值。

谢谢

xbl_lkz 回答:将旧值从null更改为其他值时,数据不会出现

您是正确的,问题出在以下表达式:ISNULL(IsVal,'')<>ISNULL(@IsVal,'')

当IsVal为0且@IsVal为NULL时,它将变为:

0 <> ''

它将作为整数进行比较,因此''变为0,您将得到:

 0 <> 0

因此,在您的情况下,0,''和NULL都将被视为相等。您需要选择一个无效的int(也许为-1?)或将0强制转换为varchar进行比较。

,

感谢您的帮助, 我能够解决此问题:-

declare @tmptable TABLE (Id INT,IsVal BIT)
INSERT Into @tmptable VALUES(1,0)
--SELECT * FROM @tmptable
DECLARE @Id INT
DECLARE @IsVal BIT
declare @oldval VARCHAR(10)
SET @Id=1
SET @IsVal=null

select @oldval=isval from @tmptable WHERE Id=1
print ISNULL(@oldval,'')
print ISNULL(@IsVal,'')
--if(ISNULL(CAST(@oldval AS INT),'')<>ISNULL(CAST(@IsVal AS INT),''))
--BEGIN
PRINT '1'
select @Id as PrimaryKeyValue,CAST(IsVal as VARCHAR(10)) as OldValue,CAST(ISNULL(@IsVal,'') as VARCHAR(10)) as NewValue,'IsVal' AS DisplayFieldName,CASE IsVal 
     WHEN 1 THEN 'Yes' 
     WHEN 0 THEN 'No'
     END  as DisplayOldValue,CASE  @IsVal 
      WHEN 1 THEN 'Yes'
      WHEN 0 THEN 'No'
     END  as DisplayNewValue   
from @tmptable WHERE Id =@Id and ISNULL(CAST(IsVal AS VARCHAR),'null')<>ISNULL(CAST(@IsVal AS VARCHAR),'null')
,

为什么不仅仅使用简单的比较?

(IsVal = @IsVal or IsVal IS NULL AND @IsVal IS NULL)

假设类型不兼容,您可能仍会遇到类型转换问题。

,

为什么不仅仅使用简单的比较?

(IsVal = @IsVal or IsVal IS NULL AND @IsVal IS NULL)

假设类型不兼容,您可能仍会遇到类型转换问题。

如果是这样的话:

(IsVal = CONVERT(VARCHAR(255),@IsVal) or
 IsVal IS NULL AND @IsVal IS NULL
)

无需为isnull()coalesce()发明特殊值。

本文链接:https://www.f2er.com/3152899.html

大家都在问