如何通过java使用regexp作为过程中的参数来执行sql过程?

如何通过java使用regexp作为过程中的参数来执行sql过程?,java,sql-server,regex,stored-procedures,jdbc,Java,Sql Server,Regex,Stored Procedures,Jdbc,默认情况下,字段验证参数在我的sql数据库中具有^[A-Za-z\-.]*$值 我有一个存储过程,可以更改一些参数 我尝试使用^[A-Za-z0-9\-.]*$更新此参数 我尝试使用CallableStatement执行该过程。请参阅下文: String newRegexValue = "^[A-Za-z0-9\-.']*$"; String parameterName = "ValidationParameter"; CallableStatement callableStatement =

默认情况下,字段验证参数在我的sql数据库中具有
^[A-Za-z\-.]*$

我有一个存储过程,可以更改一些参数

我尝试使用
^[A-Za-z0-9\-.]*$
更新此参数

我尝试使用
CallableStatement
执行该过程。请参阅下文:

String newRegexValue = "^[A-Za-z0-9\-.']*$";
String parameterName = "ValidationParameter";
CallableStatement callableStatement = connection.prepareCall("exec UpdateProcedure '"+parameterName  +"', '"+ newRegexValue +"' ");
callableStatement .execute();
但我得到了SQLServerException:

^

我试图在
^
之前添加反斜杠,但错误仍然存在


我想主要问题在于筛选
newRegexValue

你忘了逃过刀口。试试这个:

"^[A-Za-z0-9\\-.']*$"

问题在于单引号(撇号),因为它也在SQL命令中使用。您要么需要对其进行转义(
\”
),要么——如果在某些XML中使用了它——使用
&apos实体


如果您不想在匹配中使用撇号,只需将其从正则表达式中删除。

您可以在存储过程中显示
T-SQL
语句吗?@Docteur,反斜杠和regexp没有帮助@gotqn,抱歉,无法显示您可能声明了一个范围,从一个文本反斜杠和一个文本
?我想你需要检查一下在正则表达式中逃跑的情况。试着在字符类的末尾加上不带换行符的连字符。@Stribizev,试过了,但没有帮助图案中的撇号怎么办?你能这样传吗?它可能需要转义:
\'
。此符号还用作SQL命令中的值分隔符。已尝试但获得SQLServerException:^Wait.附近的语法不正确。。您是否尝试过用
参数名称
之间的空格替换
@user2837153(或带有
=
符号)不,我的过程具有nex视图dbo。UpdateProcedure(@parameterName-varchar(50),@Value-varchar(150))我试图删除\',并用“^[A-Za-z0-9-.']*$”更新了我的值-参数已成功更新!谢谢大家的回答,尤其是斯特里比雪夫!我将\'替换为'-控制台中出现“^附近语法不正确”错误。很高兴它对您有效。如果我的答案证明对你有用的话,请考虑一下投票。