0

我正在尝试使用参数化 SQL 在 vbscript 中创建 LIKE SQL 语句。

通过的命令文本是沿着

SET NOCOUNT ON; 
DECLARE @pname as nvarchar(50); 
SELECT @pname = ?; 
SELECT *
FROM tblProject
WHERE projName LIKE @pname

我将 % 连接到作为 pname 传递的字符串的任一侧。如果我将 LIKE 更改为 = 并删除 %s 那么它工作正常。如果我直接运行该语句并将@pname替换为'%searchterm%',它就可以正常工作。任何帮助将非常感激。

编辑:VBScript:

Set rsAnswers = Server.CreateObject("ADODB.Recordset")
Set cmd = server.createobject("ADODB.Command")
cmd.CommandText = mySQL
cmd.CommandType = 1
cmd.CommandTimeout = 900 
cmd.ActiveConnection = svrPerformanceConnectionset prm = cmd.CreateParameter("@pname", 129, 1, 50, thisProjName)
cmd.Parameters.Append prm
rsAnswers.CursorLocation = 3
rsAnswers.Open cmd, , 0, 1

(thisProjName 正在从表单中获取字符串)

谢谢,蒂姆

4

2 回答 2

0

这是预期的行为,因为参数值被转义以将其作为值处理。

解决方案是将参数的串联%移出:

SET NOCOUNT ON; 
SELECT *
FROM tblProject
WHERE projName LIKE '%' + @pname + '%';

注意缺少参数的声明和初始化:初始化和赋值是由 VBScript 引擎和数据访问层在脚本中创建相关对象时执行的。

于 2015-09-08T09:04:59.823 回答
0

在尝试了很多事情之后,我发现问题在于我将参数声明为的数据类型。我不确定为什么使用 adVarChar (200) 而不是 adChar (129) 使 LIKE 语句起作用。

感谢所有回答和评论的人!

于 2015-09-25T08:10:56.997 回答