【问题标题】: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
【解决方案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