代码之家  ›  专栏  ›  技术社区  ›  brechtvhb

存储过程:传递值数组时在表中搜索

  •  1
  • brechtvhb  · 技术社区  · 14 年前

    我需要创建一个接收参数(名为@codes)的存储过程。

    这是一个字符串,包含由半列分隔的代码列表。 我需要查看一个表的内部,并返回所有包含在@codes参数中传递的代码(在EANcodes列中)的行。

    谁能帮我开始吗。我对存储过程的了解非常有限。

    提前谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Joe Stefanelli    14 年前

    理想情况下,我更希望看到以另一种方式传递参数,或者使用 table-value parameter (假设是SQL 2008)或XML,它们可以很容易地分解到一个表中。

    或者,使用SQL拆分函数(例如 here )将字符串解析为临时表,然后在select查询中针对该表进行连接。

        2
  •  0
  •   Siege898    14 年前

    存储过程实际上并不打算将字符串列表作为参数来处理。最好在应用程序代码中将其拆分,然后多次调用存储过程,每次都将其作为参数。

    然而,如果你觉得有必要这样做。可以循环遍历字符串,使用CHARINDEX查找分号的下一个索引,然后使用SUBSTRING获取下一个代码。然后,您可以在每次迭代中对匹配的行使用CTE,循环完成后,只需返回CTE即可。这是相当骇客,但我想不出任何其他方法来做到这一点。 (这些是T-SQL字符串函数)

    有关字符串操作函数的信息(在T-SQL中): http://msdn.microsoft.com/en-us/library/ms186323.aspx

    以下是MySQL中类似的功能: http://dev.mysql.com/doc/refman/5.1/en/string-functions.html