Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有任何内置的SQL Server 2005函数可以将字符串参数序列化/反序列化到表中?_Sql_Sql Server_Sql Server 2005_Tsql_Refactoring - Fatal编程技术网

是否有任何内置的SQL Server 2005函数可以将字符串参数序列化/反序列化到表中?

是否有任何内置的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)…)

最大的问题是是否有任何“内置”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行受影响)