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

Sql server 在vbscript中使用参数化SQL的LIKE语句,sql-server,vbscript,sql-parametrized-query,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更改为an=并删除%s,则它可以正常工作。如果我直接运行该语句并将@pname替换为“%sear

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

传递的命令文本沿

SET NOCOUNT ON; 
DECLARE @pname as nvarchar(50); 
SELECT @pname = ?; 
SELECT *
FROM tblProject
WHERE projName LIKE @pname
我将%连接到作为pname传递的字符串的任一侧。如果我将LIKE更改为an=并删除%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正在从表单获取字符串)

谢谢,
Tim

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

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

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

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

尝试了许多方法后,我发现问题在于我声明参数的数据类型。我不知道确切的原因,但使用adVarChar(200)而不是adChar(129)使类似的语句起作用


感谢所有回答和评论的人

它应该适用于
@pname
中的任何特殊字符,除非
%
您应该发布所有vbscript代码。如果使用SQL Profiler跟踪它,您会看到什么?@Nick.McDermaid我添加了更多可能相关的vbscript。整个页面超过1000行,包含机密信息。我希望我发布的内容足够了:)我已经从其他人那里接收了这段代码,而且我对vbscript还是非常陌生。谢谢@Paolo。但我还是不能让它发挥作用。您给出的代码在db中运行良好,但在我的asp页面中运行不好。很明显,我不能将“要搜索的文本”部分放在查询中,因为这是要传递的参数。因此,命令文本如下:将NOCOUNT设置为ON;宣布[在]pname为nvarchar(50);选择[at]pname=?;从tblProject中选择*,其中projName类似“%”++[at]pname++“%”;然后将“要搜索的文本”传递给ADO对象。设置prm=cmd.CreateParameter(“[at]pname”,129,1,50,thisProjName)cmd.Parameters.Append prmple请参见我的编辑。由于您最初没有发布vb代码,我认为sql是为了进行测试而编辑的。当我从sql中删除声明时,我得到一个“必须声明标量变量”错误。我没有在vbscript中正确声明它吗?设置prm=cmd.CreateParameter(“[at]pname”,129,1,50,thisProjName)cmd.Parameters.Append prmin您的脚本是[at]pname还是@pname?最好将脚本添加到问题中…对不起,我是这个网站的新手。我正在更改它,所以它没有将其作为用户名。我已将代码添加到问题中。