我有一个项目表,需要选择在其他地方形成和检索的字符串中找到项目ID的行。例如,要匹配的字符串如下所示:
'100684','103223','103228'
或者我可以剥掉它来制作:
100684,103223,103228
但是我没有从以下尝试中获得任何成功:
SQL = "SELECT * FROM Table Where ID LIKE '" & strString & "' "
SQL = "SELECT * FROM Table Where ID IN '" & strString & "' "
SQL = "SELECT * FROM Table Where PATINDEX('%" & ID & "%','" & strString & "') > 0 "
SQL = "SELECT * FROM Table Where PATINDEX(ID,'" & strString & "') > 0 "
SQL = "SELECT * FROM Table Where CHARINDEX(ID, '" & strString & "') > 0 "
这些不能产生结果或给出错误,如
参数数据类型int对于charindex函数的参数1无效
答案 0 :(得分:2)
使用字符串的剥离版本并尝试
SQL = "SELECT * FROM Table Where ID IN (" & strString & ")"
答案 1 :(得分:0)
从STRING到INT的转换将有助于
SQL = "SELECT * FROM Table Where ID = CONVERT(INT,'"&strString &"')"
答案 2 :(得分:0)
这是一个很好的经验法则:作为参数传入的字符串永远不应该连接到SQL查询文本中。
正确的方法是使用命名参数或表值参数。 你想最终得到这样的SQL查询:
SQL = "SELECT * FROM Table Where id IN (@p1, @p2, @p3)"
然后调用@ p1,@ p2,@ p3的相应值。用不同数量的@ p&#39进行动态构建字符串是很好的。
如果您传递的值超过2100,则应使用表值参数。
最后,您还可以使用拆分器安全地解析T-SQL中的字符串。 Jeff Moden在SSC上有一篇关于有效分割文本的文章:http://www.sqlservercentral.com/articles/Tally+Table/72993/