是否有任何内置的SQL Server 2005函数可以将字符串参数序列化/反序列化到表中?
最大的问题是是否有任何“内置”SQL Server 2005函数可以将字符串参数序列化/反序列化为表变量?其余部分进一步解释了我的需要,但可能不是必需的 我有一个SQL SP要重构。它目前接受五个客户ID和五组与这些客户相关的订单ID。(一对多) 我想更改参数以选择一个或多个客户ID,每个客户ID都有一个或多个订单ID 客户id列表很简单,因为您可以提供字符串“1,3,5,77,21”,然后是dbo.split(@customer,,)(然后是isnumeric()和convert(int)…)是否有任何内置的SQL Server 2005函数可以将字符串参数序列化/反序列化到表中?,sql,sql-server,sql-server-2005,tsql,refactoring,Sql,Sql Server,Sql Server 2005,Tsql,Refactoring,最大的问题是是否有任何“内置”SQL Server 2005函数可以将字符串参数序列化/反序列化为表变量?其余部分进一步解释了我的需要,但可能不是必需的 我有一个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?为什么不尝试使用XML数据类型 及
使用自定义表格表达式(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)
声明
@客户列表VARCHAR(1000)
SET@cust_list='111222333444555'
;与客户(i,j)
作为
(
选择i=1,
j=CHARINDEX(“,”,@cust_list+“,”)
联合所有
选择i=j+1,
j=CHARINDEX(“,”,@cust_list+“,”,j+1)
从客户处
其中CHARINDEX(',',@cust_list+',',j+1)0
)
选择子字符串(@cust_list,i,j-i)作为CustId
从客户处
去
卡斯蒂德
-------
111
222
333
444
555
(5行受影响)