1

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

4

3 回答 3

2

使用您的字符串的剥离版本并尝试

SQL = "SELECT * FROM Table Where ID IN (" & strString & ")"
于 2013-01-26T07:14:58.043 回答
1

从 STRING 到 INT 的转换会有所帮助

SQL = "SELECT * FROM Table Where ID = CONVERT(INT,'"&strString &"')"
于 2013-01-26T07:16:37.843 回答
0

这是一个很好的经验法则:作为参数传入的字符串永远不应该连接到 SQL 查询文本中。

正确的方法是使用命名参数或表值参数。您希望得到这样的 sql 查询:

 SQL = "SELECT * FROM Table Where id IN (@p1, @p2, @p3)"   

然后你调用它为@p1、@p2、@p3 传入适当的值。可以使用不同数量的@p 动态构建字符串。

如果要传入的值超过 2100 个,则应使用表值参数。

最后,您还可以使用拆分器安全地解析 T-SQL 中的字符串。Jeff Moden 在 SSC 上有一篇关于有效分割文本的优秀文章:http ://www.sqlservercentral.com/articles/Tally+Table/72993/

于 2013-01-26T08:05:04.743 回答