Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql WHERE子句中的isnull函数_Sql_Sql Server 2014_Isnull - Fatal编程技术网

Sql WHERE子句中的isnull函数

Sql WHERE子句中的isnull函数,sql,sql-server-2014,isnull,Sql,Sql Server 2014,Isnull,我试图修复存储过程中的一个问题,但遇到了一个困扰我的问题 基本上,isnull对T0中的一条记录按预期工作,但对另一条记录不起作用,其中T0.FatherCard均为NULL。我不明白为什么 SELECT * FROM OINV T0 WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0189' 按预期返回完整的数据行 SELECT * FROM OINV T0 WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0

我试图修复存储过程中的一个问题,但遇到了一个困扰我的问题

基本上,
isnull
对T0中的一条记录按预期工作,但对另一条记录不起作用,其中
T0.FatherCard
均为NULL。我不明白为什么

SELECT *
FROM OINV T0
WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0189'
按预期返回完整的数据行

SELECT *
FROM OINV T0
WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0817'
不返回任何内容。我期待着一个完整的数据行

在这两种情况下,
FatherCard=NULL

CardCode    FatherCard  Table
------------------------------
C0189       NULL        OINV
C0817       NULL        OINV
FatherCard
CardCode
的类型和长度都相同(
nvarchar

如果我删除了
ISNULL
函数,只需选择
WHERE T0.CardCode=C0817
,它就可以正常工作

SELECT *
FROM OINV T0
WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0817'
是否可能
T0。父亲卡在
ISNULL
评估中实际上不是空的,并且正在返回一些其他值

请使用

where columnname is null
请使用

where columnname is null

有两种可能性

  • 父卡的字符串值可能为“NULL”,而实际上并非beNULL
  • 在C0817的末尾可能有多余的空格,即
    'C0817'
  • 要检查使用:

    SELECT  '[' + CardCode + ']', ISNULL(FatherCard, 'Yes is NULL')
    FROM    OINV
    WHERE   RTRIM(CardCode) = 'C0817'
    

    有两种可能性

  • 父卡的字符串值可能为“NULL”,而实际上并非beNULL
  • 在C0817的末尾可能有多余的空格,即
    'C0817'
  • 要检查使用:

    SELECT  '[' + CardCode + ']', ISNULL(FatherCard, 'Yes is NULL')
    FROM    OINV
    WHERE   RTRIM(CardCode) = 'C0817'
    


    它是NULL值还是NULL文本字符串“NULL”?请从OINV T0运行
    SELECT*,isnull(T0.FatherCard,T0.CardCode)并发布您需要的内容get@shree.pat18-它是空值。@NiyokoYuliawan-我可以这样做,但结果表很大。您是否在寻找每条记录中的完整行以进行比较?@shree.pat18实际上您似乎是对的,一行中的值为NULL,另一行中的值为string NULL。值之间的差异我不确定,这是仅通过SAP客户端更新的SAP数据库。它是空值还是文本字符串“NULL”中的空值?请运行
    SELECT*,isnull(T0.FatherCard,T0.CardCode)从OINV T0
    发布您想要的内容get@shree.pat18-它是空值。@NiyokoYuliawan-我可以这样做,但结果表很大。您是否在寻找每条记录中的完整行以进行比较?@shree.pat18实际上您似乎是对的,一行中的值为NULL,另一行中的值为string NULL。值之间的差异我不确定,这是只通过SAP客户端更新的SAP数据库。我可以使用
    if
    语句检查第一列
    是否为空,如果为空,则使用第二列,但我认为这就是
    isnull()
    应该做什么?我可以使用
    if
    语句检查第一列
    是否为空,然后使用第二列检查是否为空,但我认为
    isnull()
    应该做什么?谢谢Craig。我应该检查一下,但是你是对的,值实际上不是
    NULL
    where
    T0.CardCode=C0817
    ,而是
    T0.CardCode=C0189
    。我不知道是什么或者为什么,这是一个非常普通的SAP B1数据库。@nickc在如何设置文本类型字段的空值方面很容易出错。1) 在update语句中意外地在NULL关键字周围加了引号。例如,
    更新。。。设置Col='NULL'
    2)如果使用编辑器(网格/文本框)更新值,则可能会错误地键入字符串“NULL”。某些控件(例如SQL Server Management Studio中的编辑网格)需要使用特殊技术来设置NULL,例如
    Ctrl+0
    。另请参阅关于使用CASE语句,我建议最好在每次需要处理边缘情况时清理数据,而不是编写晦涩难懂的SQL。注意,您可能还需要考虑一个空字符串是否实际上是一个有效的值。我怀疑在这种情况下不是这样,所以这些也应该更新为NULL。这可以通过
    更新OINV SET FatherCard=NULL轻松完成,其中FatherCard位于('NULL','')
    。为了避免将来数据的恶化,您应该确保所有输入源都能正确设置NULL(甚至可能创建检查约束以防止某些已知的无效值)。谢谢Craig。我应该检查一下,但是你是对的,值实际上不是
    NULL
    where
    T0.CardCode=C0817
    ,而是
    T0.CardCode=C0189
    。我不知道是什么或者为什么,这是一个非常普通的SAP B1数据库。@nickc在如何设置文本类型字段的空值方面很容易出错。1) 在update语句中意外地在NULL关键字周围加了引号。例如,
    更新。。。设置Col='NULL'
    2)如果使用编辑器(网格/文本框)更新值,则可能会错误地键入字符串“NULL”。某些控件(例如SQL Server Management Studio中的编辑网格)需要使用特殊技术来设置NULL,例如
    Ctrl+0
    。另请参阅关于使用CASE语句,我建议最好在每次需要处理边缘情况时清理数据,而不是编写晦涩难懂的SQL。注意,您可能还需要考虑一个空字符串是否实际上是一个有效的值。我怀疑在这种情况下不是这样,所以这些也应该更新为NULL。这可以通过
    更新OINV SET FatherCard=NULL轻松完成,其中FatherCard位于('NULL','')
    。为了避免将来数据的恶化,您应该确保所有输入源都能正确设置NULL(甚至可能创建检查约束以防止某些已知的无效值)。