最大的问题是,是否有“内置”SQL Server 2005函数将字符串参数序列化/反序列化为表变量?其余部分进一步解释了我的需求,但可能没有必要。< / p>
我有一个SQL SP我想重构。它目前接受五个客户ID和五组与这些客户相关的订单ID。 (一对多)。
我想更改参数以选择一个或多个客户ID,每个客户ID都有一个或多个订单ID。
客户ID列表很简单,因为您可以提供字符串“1,3,5,77,21”,然后是dbo.split(@customer,',')(然后是isnumeric()和convert(int) ..)
页面会更难。我的第一个想法是像“[1,3,5],[2,4,6],[2,4,6]”这样的字符串。当然,我可以欺骗并在“1,3,5 | 2,4,6 | 2,4,6”之类的东西上做一个双重dbo.split()。但是,我想要一些更人性化和标准化的东西,也许是XML?
答案 0 :(得分:1)
答案 1 :(得分:1)
使用自定义表格表达式(CTE),您可以更轻松地将列表转换为表格。 您可以调整此模式以创建您正在考虑的嵌套数据。
DECLARE
@cust_list VARCHAR(1000)
SET @cust_list = '111,222,333,444,555'
;WITH cust_tbl(i,j)
AS
(
SELECT i = 1,
j = CHARINDEX (',', @cust_list + ',')
UNION ALL
SELECT i = j + 1,
j = CHARINDEX (',', @cust_list + ',', j + 1)
FROM cust_tbl
WHERE CHARINDEX (',', @cust_list + ',', j + 1) <> 0
)
SELECT SUBSTRING(@cust_list, i, j - i) AS CustId
FROM cust_tbl
GO
CustId
-------
111
222
333
444
555
(5 row(s) affected)