在vbscript中使用参数化SQL的LIKE语句

时间:2015-09-08 08:31:20

标签: sql-server vbscript sql-parametrized-query

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

传递的命令文本沿着

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

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

编辑: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从表单中获取字符串)

谢谢, 添

2 个答案:

答案 0 :(得分:0)

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

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

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

注意缺少的声明&参数的初始化:在脚本中创建相关对象时,VBScript引擎和数据访问层执行inizialization和value assignement。

答案 1 :(得分:0)

在尝试了很多东西后,我发现问题是我将参数声明为的数据类型。我不确定为什么,但使用adVarChar(200)而不是adChar(129)使LIKE语句正常工作。

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