SQL Server:选择记录ID出现在字符串中的位置

时间:2013-01-26 07:10:06

标签: sql-server

我有一个项目表,需要选择在其他地方形成和检索的字符串中找到项目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无效

3 个答案:

答案 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/