当前位置: 首页 > 面试题库 >

为什么不能在CONTAINS语句中调用ISNULL?

凌嘉志
2023-03-14
问题内容

假设我有这个SQL查询:

declare @input varchar(20)
select *
from myTable
where CONTAINS (myColumn, ISNULL(@input, 'replacement text'))

如果我尝试执行此操作,则会收到一条错误消息,提示“
ISNULL附近的语法不正确”。我知道这是ISNULL的正确语法。为什么不能在CONTAINS语句内部调用ISNULL?


问题答案:

试试这个:

declare @input varchar(20)
SET @input=ISNULL(@input, 'replacement text')
select *
from myTable
where CONTAINS (myColumn, @input)

当您尝试将表达式放入存储过程调用时,这是相同的问题:

EXEC YourProcedure ISNULL(@input, 'replacement text') --will fail too

CONTAIN需要字符串文字,请参见CONTAINS(Transact-SQL)



 类似资料:
  • 问题内容: 为什么下面的代码: 给出错误: 在循环外继续 问题答案: 失败是switch语句的标准行为,因此,在switch语句中使用Continue没有意义。Continue语句仅在for / while / do..while循环中使用。 根据我对您意图的理解,您可能想写: 我还建议您将默认条件放在最后。 编辑:continue语句不能在switch语句中使用并不完全正确。(带有理想标记的)

  • 问题内容: 以下Java代码无法编译。 为什么?在没有先声明的情况下,没有代码路径可导致程序将1分配给该路径。 我想到的范围可能仅限于第一条陈述,但后来我不明白为什么。如果我真的不想不必要地声明以提高性能怎么办?我不喜欢声明后不使用变量。 (您可能想争论一下,我不可以在第二条语句中简单地声明b ,在这种情况下,请想象一下它可能在其他地方处于循环中。) 问题答案: 为什么?如果没有先声明,没有代码路

  • 问题内容: 此功能是否将在以后的Java版本中使用? 有人可以解释为什么我不能这样做吗,就像Java 语句起作用的技术方式一样? 问题答案: 带有案例的switch语句已在Java SE 7中实现,至少在首次提出要求后的 16年。没有提供延迟的明确原因,但可能与性能有关。 在JDK 7中实现 现在,该功能已 通过“脱糖”过程实现。在声明时使用常量的干净,高级语法在编译时扩展为遵循模式的更复杂的代码

  • 我正在使用forEach循环一个nodeList。我的代码如下 此代码引发错误为 未捕获的TypeError:Array.Foreach不是函数 然而,一些较旧的浏览器还没有实现nodelist.foreach()和array.from()。但是这些限制可以通过使用array.prototype.foreach()来规避(本文档中有更多内容)。 参考:MDN

  • 问题内容: (注:编辑过的问题;先前的意图不明确) 考虑以下代码: 此代码可以正常工作。 但是,如果我替换: 与: 然后编译器抱怨: java:/path/to/Foo.java:whatever:枚举开关大小写标签必须是枚举常量的非限定名称 (要求内联常量的一个原因是switch语句在每种情况下都需要常量,并且两个这样的常量值可能都不相同。编译器在编译时检查switch语句中是否有重复的常量值;

  • 我还没有看到这个问题,这让我很惊讶。 以下内容不会编译: 然而,将此更改为强制转换对象并将其引用存储在条件语句之外的新对象中,可以解决此问题: 我的问题是,为什么Java中不允许这种行为?(特别是Java 5) 编辑:啊哈!谢谢大家。该死的现代IDE给出了模糊的错误消息。我已经开始打折了,这一次对我没有任何好处。(Netbeans警告我缺少括号和分号…)