Sql server 使用LIKE的SQL Server查询在VBScript下存在空格问题

Sql server 使用LIKE的SQL Server查询在VBScript下存在空格问题,sql-server,vbscript,sql-like,Sql Server,Vbscript,Sql Like,[撤销问题:问题源于未转义web表单中提交的值。ASP脚本删除了未转义的空格,从而导致问题。] 在网页中,我试图使用VBScript对MS SQL Server中的表进行搜索。搜索使用LIKE子句(带通配符)。如果输入中没有空格,搜索工作正常。但是,如果输入中有空格,搜索将不返回任何内容 例如,如果我搜索IT部门我什么也得不到,但是如果我搜索部门我会得到IT部门。不知何故,IT和部门之间的空隙造成了麻烦。如果我使用SQLServerManagementStudio直接针对服务器运行脚本,那么使用

[撤销问题:问题源于未转义web表单中提交的值。ASP脚本删除了未转义的空格,从而导致问题。]

在网页中,我试图使用VBScript对MS SQL Server中的表进行搜索。搜索使用
LIKE
子句(带通配符)。如果输入中没有空格,搜索工作正常。但是,如果输入中有空格,搜索将不返回任何内容

例如,如果我搜索
IT部门
我什么也得不到,但是如果我搜索
部门
我会得到
IT部门
。不知何故,
IT
部门之间的空隙造成了麻烦。如果我使用SQLServerManagementStudio直接针对服务器运行脚本,那么使用
IT部门的搜索将返回正确的结果

另外,如果我不使用SQL占位符参数,而是直接将其放入搜索字符串中,那么搜索就会起作用

只有在搜索字符串包含空格并在搜索失败时使用占位符的情况下,才会出现这种情况

以下是我正在使用的代码:

Dim oCmd, OffDescParam, description, query
description = "IT Department"
Set oCmd = Server.CreateObject("ADODB.Command")

OffDescParam = "%" & description & "%"
Set objOffDescParam = _
  oCmd.CreateParameter("@offdesc", adChar, adParamInput, Len(OffDescParam), OffDescParam)

query = "SELECT OfficialDescription " & _
        "FROM [MyDatabase].[dbo].[Organizations] " & _
        "WHERE (OfficialDescription LIKE ?)" & _
        "ORDER BY OfficialDescription"
' If I use "WHERE (OfficialDescription LIKE '%IT Department%')" it works.

oCmd.ActiveConnection = "some/connection/string"
oCmd.ActiveConnection.CursorLocation = adUseClient
oCmd.CommandType = adCmdText
oCmd.CommandText = query

oCmd.Parameters.Append objOffDescParam
oCmd.Prepared = True
Set oRst = CopyRecordSet(oCmd.Execute)
oCmd.ActiveConnection.close

难道不需要

"WHERE (OfficialDescription LIKE '?')" & _
您的代码适合我(事实上,我在CopyRecordSet行中遇到了一个错误,但我怀疑这与我的vbscript/ado版本有关)

在Profiler中,我看到了以下内容

declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,N'@P1 char(15)',N'SELECT blah FROM [test].[dbo].[mytable] WHERE (mycol LIKE @P1)ORDER BY mycol','%IT Department%'
select @p1
当我在ManagementStudio中直接运行时

declare @p1 int
exec sp_prepexec @p1 output,N'@P1 char(15)',N'SELECT blah FROM [test].[dbo].[mytable] WHERE (mycol LIKE @P1)ORDER BY mycol','%IT Department%'
select @p1

我得到了结果。也许可以试着在你的终端使用profiler,看看是否一切都如预期的那样。

你可以尝试两件事,尽管看起来你做得很正确:

  • 当您使用
    adChar
    时,ADO或SQL Server有时会表现出令人惊讶的行为。尝试改用
    adVarChar
  • VB有时会返回字节数(虽然对于字符串,它不应该返回字节数)。请尝试手动计算字符串的长度并将其传递给
    CreateParameter

我尝试了
adVarChar
,结果相同。我不知道你所说的手动计算字符串长度是什么意思。在VB中,除了使用
Len
,还有什么方法可以计算字符串的长度?@rlandster:您可以传递
15
,而不是
Len(OffDescParam)
。这是一个很长的机会,因为你显然是通过了一个stringNo。占位符(参数)将替换为正确引用的字符串。请参阅。撤回问题:问题源于未转义以web表单提交的值。ASP脚本删除了未填充的空格,从而导致问题。