开发者

Are there any built in SQL Server 2005 functions to serialize / deserialize string parameters to a table?

The big question is are there any "built in" SQL Server 2005 functions to serialize / deserialize string parameters to a table variables? The rest explains my need further, but may not be necessary.

I have a SQL SP I would like to refactor. It currently accepts five customers ids and five sets of order ids relevant to those customers. (one to many).

I would like to change the parameters to select one or more customer ids each having one or more order ids.

The customer id list would be easy because you can provide a string "1,3,5,77,21", then dbo.s开发者_运维技巧plit(@customer, ',') (then isnumeric() and convert(int)..)

Pages would be more difficult. My first thought is a string like "[1, 3, 5], [2, 4, 6], [2, 4, 6]". Of course, I could cheat and do a double dbo.split() on something like "1,3,5|2,4,6|2,4,6". However, I would want something a little more humanized and standard, maybe XML?


Why not try to use the XML data type

Understanding the SQL Server 2005 XML Data Type

and

XML Support in Microsoft SQL Server 2005


Using custom table expressions (CTE) you can convert the list to a table much more easily. You may be able to adapt this pattern to create the nested data you are considering.

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)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜