【问题标题】:Equal to (=) operator in MS SQLMS SQL 中的等于 (=) 运算符
【发布时间】:2016-10-06 09:27:58
【问题描述】:

我正在使用带有 VB.NET 语言的 Visual Studio 2003。我写了我的查询像

"UPDATE book SET status='confirm' WHERE idnum = '%" & daoi.Text & "%'"

但数据不会更新。当我使用此代码时

"UPDATE book SET status='confirm' WHERE idnum LIKE '%" & daoi.Text & "%'"

数据已更新。

为什么我不能在语句中使用等于?

【问题讨论】:

标签: sql sql-server vb.net


【解决方案1】:

% 字符是 SQL 中的通配符。你不需要它,当不使用LIKE,但等于。

您的查询应该是"UPDATE book SET status='confirm' WHERE idnum = '" & daoi.Text & "'"

另外:您应该参数化您的查询。 Always think of little bobby tables.

【讨论】:

    【解决方案2】:

    在您的 equals 语句中,您有 % 符号。因此,它只会匹配 ID 中也包含 % 符号的任何图书 ID。

    %LIKE 语句中的通配符。

    【讨论】:

      【解决方案3】:

      LIKE= 不一样,它们是两个不同的运算符。

      LIKE 查找部分匹配的字符串 - E.G.

      'here is an example' LIKE '%exam%' -- TRUE
      

      = 寻找完全匹配的 - E.G.

      'here is an example' = '%exam%' -- FALSE
      'exam' = 'exam' -- TRUE
      

      【讨论】:

      • 对正确写好的答案的神秘投反对票......所以
      【解决方案4】:

      假设 daoi.Text 包含您要查找的确切值,您可以:

      "UPDATE book SET status='confirm' WHERE idnum = '" & daoi.Text & "'"
      

      但是请注意,这种查询构建是不安全:如果用户(或犯罪者)输入5';DROP TABLE book;--,那么与你期待。这称为 SQL 注入。

      【讨论】:

        【解决方案5】:

        如果 idnum 列包含值“A0001”, 当您执行第一个查询'WHERE idnum = '%" & daoi.Text & "%'"'时,这将尝试与不正确的相等操作即'A0001'='%A0001%'匹配。

        当您应用第二个查询“WHERE idnum LIKE '%" & daoi.Text & "%'"”时,这将尝试使用部分匹配将列值与输入数据匹配。即'A0001'LIKE '%A0001%' 所以这将起作用。

        如果您想了解更多关于like 运算符的信息,请参阅MSDN

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-07
          • 2019-11-27
          • 2014-02-17
          • 1970-01-01
          • 1970-01-01
          • 2012-11-28
          • 2021-03-01
          • 2011-01-21
          相关资源
          最近更新 更多