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

等于MS SQL中的(=)运算符,sql,sql-server,vb.net,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 & "%'" 数据已更新 为什么不能在语句中使用等于?在SQL中,

我正在使用Visual Studio 2003和VB.NET语言。我写我的问题就像

"UPDATE book SET status='confirm' WHERE idnum = '%" & daoi.Text & "%'"
但是数据没有更新。当我使用这个代码时

"UPDATE book SET status='confirm' WHERE idnum LIKE '%" & daoi.Text & "%'"
数据已更新


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

在SQL中,
%
字符是通配符。当您不使用像这样的
时,您不需要它,而是需要它

您的查询应该是
“updatebook SET status='confirm'WHERE idnum=”&daoi.Text&“”


另外:您应该参数化您的查询

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

查找部分匹配的字符串-例如

'here is an example' LIKE '%exam%' -- TRUE
=
查找精确匹配-例如

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

在equals语句中有
%
符号。因此,它将只匹配ID中有
%
符号的任何图书ID


%
LIKE
语句中的通配符

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

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

但是请注意,这种查询构建是不安全的:如果用户(或犯罪者)键入
5';放下桌上的书--然后执行一个与您期望的完全不同的查询。这称为SQL注入。

假设idnum列包含值“A0001”, 当您执行第一个查询“
时,其中idnum='%'”&daoi.Text&“%'”
”,这将尝试与不正确的相等操作ie
'a001'='%a001%'
匹配

当您应用第二个查询“
WHERE idnum(如“%””&daoi.Text&“%”“
”)时,这将尝试使用部分匹配将列值与输入数据匹配。例如,
'a001'如“%a001%”
,因此这将起作用


如果您想了解有关like运算符的更多信息,请参见下面的链接,该链接解释了如何使用
like
运算符搜索指定的模式,而
=
用于搜索中的精确比较。对正确的、写得很好的答案投了神秘的反对票……所以