Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 传递给LEFT或SUBSTRING函数的长度参数无效(需要手动)_Sql_Sql Server - Fatal编程技术网

Sql 传递给LEFT或SUBSTRING函数的长度参数无效(需要手动)

Sql 传递给LEFT或SUBSTRING函数的长度参数无效(需要手动),sql,sql-server,Sql,Sql Server,运行此sql脚本时出现以下错误 传递给LEFT或SUBSTRING函数的长度参数无效 我的sql查询: select distinct a.IMPORTBTCHSTATID, b.IMPORTBATCHID, SUBSTRING(a.XMLREQBODY, charindex('<PersonNumber>',a.XMLREQBODY)+14, (charindex('</PersonNumber>',a.XMLREQBODY)-charindex('<

运行此sql脚本时出现以下错误

传递给LEFT或SUBSTRING函数的长度参数无效

我的sql查询:

select distinct a.IMPORTBTCHSTATID, b.IMPORTBATCHID,
       SUBSTRING(a.XMLREQBODY, charindex('<PersonNumber>',a.XMLREQBODY)+14, (charindex('</PersonNumber>',a.XMLREQBODY)-charindex('<PersonNumber>',a.XMLREQBODY)-14)) as PersonNum
from FAILEDXMLBODY a inner join
     IMPORTBTCHSTAT b
     on a.IMPORTBTCHSTATID=b.IMPORTBTCHSTATID
where b.IMPORTBATCHID in ('252','253','265')
选择不同的a.importbatchstatid、b.IMPORTBATCHID、,
子字符串(a.XMLREQBODY,charindex(“”,a.XMLREQBODY)+14,(charindex(“”,a.XMLREQBODY)-charindex(“”,a.XMLREQBODY)-14)作为PersonNum
来自FAILEDXMLBODY的内部联接
进口变速箱b
在a.IMPORTBTCHSTATID=b.IMPORTBTCHSTATID上
其中b.IMPORTBATCHID位于('252'、'253'、'265'中)

发生这种情况是因为
CHARINDEX()
如果找不到字符串,则返回0,这将生成错误。一个简单的解决方案是,如果找不到值,则返回
NULL

   SUBSTRING(a.XMLREQBODY,
             NULLIF(charindex('<PersonNumber>', a.XMLREQBODY), 0) + 14, 
             NULLIF(charindex('</PersonNumber>', a.XMLREQBODY), 0) - NULLIF(charindex('<PersonNumber>', a.XMLREQBODY), 0) - 14)
            ) as PersonNum
子字符串(a.XMLREQBODY,
NULLIF(charindex(“”,a.XMLREQBODY),0)+14,
NULLIF(charindex(“”,a.XMLREQBODY),0)-NULLIF(charindex(“”,a.XMLREQBODY,0)-14)
)作为人

发生这种情况是因为
CHARINDEX()
如果找不到字符串,则返回0,这将生成错误。一个简单的解决方案是,如果找不到值,则返回
NULL

   SUBSTRING(a.XMLREQBODY,
             NULLIF(charindex('<PersonNumber>', a.XMLREQBODY), 0) + 14, 
             NULLIF(charindex('</PersonNumber>', a.XMLREQBODY), 0) - NULLIF(charindex('<PersonNumber>', a.XMLREQBODY), 0) - 14)
            ) as PersonNum
子字符串(a.XMLREQBODY,
NULLIF(charindex(“”,a.XMLREQBODY),0)+14,
NULLIF(charindex(“”,a.XMLREQBODY),0)-NULLIF(charindex(“”,a.XMLREQBODY,0)-14)
)作为人

我根据语法添加了SQL Server标记。表名中“失败”一词的含义是什么?如果这是您正在使用的实际XML(与格式错误相反),为什么不使用XML工具来访问其中的数据,而不是使用字符串操作?我根据语法添加了SQL Server标记。表名中“失败”一词的含义是什么?如果这是您正在使用的实际XML(与格式错误相反),为什么不使用XML工具来访问其中的数据,而不是使用字符串操作?如果找不到字符串,CHARINDEX()将返回0,而不是NULL。@DenisRubashkin。我想到了
NULL
作为解决方案。从答案的上下文来看,那句话真的毫无意义。谢谢你。是的,我知道我不会走运的。相同errror@mnasir . . . 此表达式不能是该错误的原因。问题可能在查询中的其他位置,或者您正在引用导致问题的视图。如果找不到字符串,CHARINDEX()将返回0,而不是NULL。@DenisRubashkin。我想到了
NULL
作为解决方案。从答案的上下文来看,那句话真的毫无意义。谢谢你。是的,我知道我不会走运的。相同errror@mnasir . . . 此表达式不能是该错误的原因。问题可能在查询的其他地方,或者您正在引用导致问题的视图。