不正确的 SQL 语法 - 字符串后的未关闭引号

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3422306/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 07:07:29  来源:igfitidea点击:

Incorrect SQL Syntax - Unclosed quotation mark after the character string

sqlsql-server-2005

提问by user412814

Now i have string a = "Unclosed quotation mark after the character string '%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC'. Incorrect syntax near '%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC'."for filter

现在我有a = "Unclosed quotation mark after the character string '%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC'. Incorrect syntax near '%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC'."过滤器的字符串

I'm using replace ("'","''") replace ("%","[%]") replace ("[","[[]")

我正在使用替换 ("'","''") 替换 ("%","[%]") 替换 ("[","[[]")

and I have as a result for string strSQL =

我的结果是字符串 strSQL =

select * from studiologs 
where [Message] 
like '%Unclosed quotation mark after the character string ''%Bamboo.Widgets.RequestApproval.CollectTask   ORDER BY Date DESC''.  Incorrect syntax near ''%Bamboo.Widgets.RequestApproval.CollectTask   ORDER BY Date DESC''.%'

but result always is null please help me replace this string for filter

但结果总是为空,请帮我替换这个字符串作为过滤器

thanks all

谢谢大家

回答by Sachin Shanbhag

I think you have missed one more quotation mark at end of query -

我想你在查询结束时又错过了一个引号 -

select * from studiologs where [Message] like '%Unclosed quotation mark after the character string ''%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC''%'

or remove that last quotation mark as well, if your string does not have '

或删除最后一个引号,如果您的字符串没有 '

select * from studiologs where [Message] like '%Unclosed quotation mark after the character string ''%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC%'

Depending on what you are searching exactly

取决于您正在搜索的内容

回答by Tom 'Blue' Piddock

Best thing I would do here is to transfer your SQL query into a procedure, that way the string you give it wont need filtering as the punctuation in the string will notaffect the syntax of the query.

我在这里做的最好的事情是将您的 SQL 查询转移到一个过程中,这样您提供的字符串就不需要过滤,因为字符串中的标点符号不会影响查询的语法。

So something like this:

所以像这样:

USE MYDATABASE
CREATE PROC GET_STUDIO_LOGS
@INPUT_STRING AS NVARCHAR(1024)
AS 
BEGIN
SELECT * FROM STUDIOLOGS WHERE [Message] LIKE '%' + @INPUT_STRING + '%'
END


EXEC GET_STUDIO_LOGS 'Unclosed quotation mark after the character string ''%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC''. Incorrect syntax near ''%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC''.'

If you use a program to submit the SQL then you can submit the string parameter as it is without any change in punctuation. Doing it natively in SQL you just add another '(quotemark) to each quotemark that is meant to be part of the string.

如果您使用程序提交 SQL,那么您可以按原样提交字符串参数,标点符号没有任何变化。在 SQL 中进行本机操作,您只需将另一个'(引号)添加到每个要成为字符串一部分的引号中。

If you are trying to escape the % marks you can set an escape character first:

如果您试图转义 % 标记,您可以先设置一个转义字符:

SET ESCAPE '\';
SELECT '\%abc' FROM Table

Try that out, tell me how it goes.

试试看,告诉我它是怎么回事。