【问题标题】:Stored procedure: Searching in a table when passing an array of values存储过程:传递值数组时在表中搜索
【发布时间】:2010-08-05 14:03:09
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: sql-server arrays stored-procedures parameters


    【解决方案1】:

    理想情况下,我希望看到以另一种方式传递的参数,使用 table-value parameter(假设 SQL 2008)或可以轻松分解成表的 XML。

    或者,使用 SQL 拆分函数(一个示例是 here)将字符串解析为临时表,然后在您的选择查询中加入该表。

    【讨论】:

      【解决方案2】:

      存储过程并不真正意味着将字符串列表作为参数处理。你最好在你的 App 代码中拆分它,然后多次调用存储过程,每次都作为参数。

      但是,如果您觉得有必要这样做。您可以遍历字符串,并使用 CHARINDEX 查找分号的下一个索引,然后使用 SUBSTRING 获取下一个代码。然后,您可以在每次迭代时对匹配的行使用 CTE,当循环完成时,只需返回 CTE。这很hacky,但我想不出任何其他方法来做到这一点。 (这些是 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

      【讨论】:

      • 或者,为了快速而肮脏的解决方案,使用 REPLACE() 将分号转换为逗号,然后使用动态 SQL 将其推入 IN (...) 子句。但我不能真正推荐它作为答案,因为做那种事情是你设计错误的一个重要迹象!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2015-02-04
      • 1970-01-01
      • 2017-01-31
      • 2021-10-11
      • 2016-04-27
      相关资源
      最近更新 更多