【发布时间】:2010-08-05 14:03:09
【问题描述】:
我需要创建一个接收参数(名为@codes)的存储过程。
这是一个字符串,其中包含由半列分隔的代码列表。 我需要查看一个表并返回所有具有在@codes 参数中传递的代码(位于 EANcodes 列中)的行。
谁能帮我开始。我对存储过程的了解非常有限。
提前致谢。
【问题讨论】:
标签: sql-server arrays stored-procedures parameters
我需要创建一个接收参数(名为@codes)的存储过程。
这是一个字符串,其中包含由半列分隔的代码列表。 我需要查看一个表并返回所有具有在@codes 参数中传递的代码(位于 EANcodes 列中)的行。
谁能帮我开始。我对存储过程的了解非常有限。
提前致谢。
【问题讨论】:
标签: sql-server arrays stored-procedures parameters
理想情况下,我希望看到以另一种方式传递的参数,使用 table-value parameter(假设 SQL 2008)或可以轻松分解成表的 XML。
或者,使用 SQL 拆分函数(一个示例是 here)将字符串解析为临时表,然后在您的选择查询中加入该表。
【讨论】:
存储过程并不真正意味着将字符串列表作为参数处理。你最好在你的 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
【讨论】: