1

我正在使用参数化查询来搜索从搜索框中拾取的特定单词,但某些单词会产生问题。其中之一是“pad”这个词。

这是我正在使用的食谱数据库,其中有一个名为“pad Thai”的食谱;如果我将单词“thai”传递给查询参数,则该配方会很好地返回。如果我传入单词“pad”,查询将运行大约 10 秒并且不返回任何记录。

我怀疑“pad”是保留关键字,所以我一直在尝试其他关键字;到目前为止,我发现唯一导致相同问题的是“proc”。

任何想法是什么问题,更重要的是,我如何解决它。

4

1 回答 1

0

由于您没有提供有关代码如何工作的详细信息,因此我将进行一些疯狂的猜测,即“参数化查询”是指存储过程,并且您通过它的整个文本来调用存储过程(不是最好的练习,但我不知道你使用的软件有什么限制)。

无论如何,原因padproc可能导致问题是因为您没有明确告诉服务器这些是字符串。由于我从未真正理解的原因,TSQL 将允许您将单字字符串传递给过程的 (n)varchar 参数。一个简单的例子是:

EXEC sp_helpdb master

严格来说,这应该会产生语法错误。正确的语法是:

EXEC sp_helpdb 'master'

但似乎开发人员认为“嘿,打字少了,这对提高生产力很有好处!” 所以查询有效。

现在,如果您的程序是这样调用的:

EXEC p_find_recipe thai

这将传递字符串'thai',一切都会按预期运行。但是,当使用procor fileortable等​​保留字时,会导致语法错误,您需要确保在值周围加上引号才能正常工作。

所有这一切: - 语法错误应该立即返回,它不应该花费 10 秒 - AFAIK 'pad' 不是 reseverd 关键字

所以我不确定 supra 是否适用于你的问题,所以很可能我只是花了 10 分钟打字才没有结果 =)

无论如何,您可能需要就您使用的语言、参数化查询的含义提供一些额外的输入(也许您的意思SELECT * FROM table WHERE field = ?是之后填充 ? 的语法?),最好是一些示例代码。

于 2011-12-23T09:59:25.877 回答