在SQL.Replace函数中匹配确切的字符串

时间:2019-05-29 09:02:38

标签: sql sql-server vb.net stored-procedures parameters

我有一个for循环,用于搜索SQL查询,并将“ CT.Item(i).ParameterName”替换为其实际值:

Dim SQLQP As String = SQL

For i=0 To CT.Count - 1
    SQL = SQL.Replace("CT.Item(i).ParameterName, "'" & CT.Item(i).Value & "'")

    SQLQP = SQLQP.Replace(CT.Item(i).ParameterName, "''' + " & CT.Item(i).ParameterName & " + '''")'.Replace("'%'", "''%''")
     End If
Next

'CT.Item(i).ParameterName'是参数名称(例如:@ p1,@ p2,@ p3等) 问题是,如果有一个名为@ p10的参数名,则在上面的循环中将其视为“ @ p1” +“ 0”,因此当更改@ p1时,它也会同时更改@ p10并留下一个0。如何避免这个问题?

我在搜索时发现的其他解决方案要么不考虑标点符号,要么使用REGEX,这不适用于SQL.replace函数。

感谢您的帮助

编辑:我已经通过反转循环解决了'SQL'的问题。但是,现在我在使用“ SQLQP”时遇到了同样的问题:

else语句

Else
   SQLQP = SQLQP.Replace(CT.Item(i).ParameterName, "''' + " & CT.Item(i).ParameterName & " + '''")

返回:

[some sql code]... WHERE  ([RM_INSTRUCTION].[INSTRUCTION_TIME]  >= ''' + @p1 + ''') AND ([RM_INSTRUCTION].[ITEM_CATEGORY_UID]  IN (''' + @p2 + ''',''' + @p3 + ''',''' + @p4 + ''',''' + @p5 + ''',''' + @p6 + ''',''' + @p7 + ''')) AND ([RM_INSTRUCTION].[ITEM_DETAIL_UID]  IN (''' + @p8 + ''',''' + @p9 + ''',''' + ''' + @p1 + '''0 + '''))')

'''+'''+ @ p1 +'''0 +'''不正确,应该是'''+ @ p10 +''',其他所有内容都是正确的。

编辑2

根据要求,这里是“替换”之前的SQLQP

[some sql]...WHERE  ([RM_INSTRUCTION].[INSTRUCTION_TIME]  >= @p1) AND ([RM_INSTRUCTION].[ITEM_CATEGORY_UID]  IN (@p2,@p3,@p4)) AND ([RM_INSTRUCTION].[ITEM_TYPE_UID]  IN (@p5)) AND ([RM_INSTRUCTION].[ITEM_DETAIL_UID]  IN (@p6,@p7,@p8,@p9,@p10))

这是它的外观:

[some sql]...WHERE  ([RM_INSTRUCTION].[INSTRUCTION_TIME]  >= ''' + @p1 + ''') AND ([RM_INSTRUCTION].[ITEM_CATEGORY_UID]  IN (''' + @p2 + ''',''' + @p3 + ''',''' + @p4 + ''')) AND ([RM_INSTRUCTION].[ITEM_TYPE_UID]  IN (''' + @p5 + ''')) AND ([RM_INSTRUCTION].[ITEM_DETAIL_UID]  IN (''' + @p6 + ''',''' + @p7 + ''',''' + @p8 + ''',''' + @p9 + ''',''' + @p10 + '''))

1 个答案:

答案 0 :(得分:0)

通过@Charles May解决了问题:

SQLQP = SQLQP.Replace(",", " , ")
SQLQP = SQLQP.Replace(")", " )")
SQLQP = SQLQP.Replace("(", "( ")

For i = CT.Count - 1 To 0 Step -1
    SQL = SQL.Replace(CT.Item(i).ParameterName, "'" & CT.Item(i).Value & "'")
    SQLQP = SQLQP.Replace(" " + CT.Item(i).ParameterName + " ", "''' + " & 
CT.Item(i).ParameterName & " + '''")
     End If
  Next