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

时间:2010-08-06 08:58:41

标签: sql sql-server-2005

现在我在字符串'%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC'后面有字符串a =“未闭合的引号”。'%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC'附近的语法不正确。 “过滤器

我正在使用替换(“'”,“''”)           替换(“%”,“[%]”)           replace(“[”,“[[]”)

我有来自studiologs的字符串strSQL = select *的结果 哪里[留言] 比如字符串''%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC''后'%未闭合的引号'。 '%Bamboo.Widgets.RequestApproval.CollectTask ORDER BY Date DESC''附近的语法不正确。%'

但结果始终为null 请帮我替换这个过滤器的字符串

感谢所有

2 个答案:

答案 0 :(得分:1)

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

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

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

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

取决于您正在搜索的内容

答案 1 :(得分:1)

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

这样的事情:

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''.'

如果您使用程序提交SQL,那么您可以按原样提交字符串参数,而不会对标点符号进行任何更改。在SQL中本地执行此操作,您只需将另一个'(quotemark)添加到每个要作为字符串一部分的引号中。

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

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

尝试一下,告诉我它是怎么回事。