等于MS SQL中的(=)运算符

时间:2016-10-06 09:27:58

标签: sql sql-server vb.net

我正在使用Visual Studio 2003和VB.NET语言。我写了像

这样的查询
"UPDATE book SET status='confirm' WHERE idnum = '%" & daoi.Text & "%'"

但是数据会更新。当我使用这段代码时

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

数据已更新。

为什么我不能在声明中使用等于?

5 个答案:

答案 0 :(得分:4)

%字符是SQL中的通配符。在不使用LIKE但不等于。

时,您不需要它

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

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

答案 1 :(得分:4)

在你的equals声明中,你有%的标志。因此,它只会匹配ID中带有%符号的任何图书ID。

%LIKE语句中的通配符。

答案 2 :(得分:3)

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

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

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

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

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

答案 3 :(得分:2)

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

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

但请注意,此类查询构建不安全:如果用户(或犯罪者)键入5';DROP TABLE book;--,则执行相当不同的查询你期待的是什么。这称为SQL注入。

答案 4 :(得分:1)

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

当您应用第二个查询“WHERE idnum LIKE '%" & daoi.Text & "%'"”时,会尝试使用部分匹配来匹配列值和输入数据。我是'A0001'LIKE '%A0001%'这样就可以了。

如果您想了解有关运营商的更多信息,请参阅MSDN