提前致谢!
我在SQL server 2008中有一个函数,它根据char我给出的字符串拆分字符串。可爱又简单。当我通过时:
Content1,Content2,Content3
我可以创建一个可爱的临时表,在单个列中用逗号(,)分隔这些值。
现在,这一切都很好,但我现在需要将以下内容拆分为一个表,但是有两列。 “名称”和“订单”
Content1:1,Content2:2,Content3:3 ...
任何人都有这样的事情吗?或者更好的传递数据的方法?如果没有,我将为每个项目运行一个单独的存储过程。我宁愿不。但如果必须,我必须!或者,从临时表创建一个临时表..我要说凌乱!
提前再次感谢。 詹姆斯
答案 0 :(得分:1)
不确定你的原始分割功能是什么样的,但我无法想象它很难扩展它。
CREATE FUNCTION [dbo].[mysplit] ( @input nvarchar(MAX), @row_delimiter char(1), @col_delimiter char(1))
RETURNS @OutputTable TABLE ( [name] nvarchar(100), [order] nvarchar(100) )
AS
BEGIN
declare
@str1 nvarchar(100)
, @str2 nvarchar(100)
, @tmpstr nvarchar(200)
WHILE LEN(@input) > 0
BEGIN
set @tmpstr = LEFT(@input, ISNULL(NULLIF(CHARINDEX(@row_delimiter, @input) - 1, -1), LEN(@input)))
set @str1 = LEFT(@tmpstr, ISNULL(NULLIF(CHARINDEX(@col_delimiter, @tmpstr) - 1, -1), LEN(@tmpstr)))
set @str2 = SUBSTRING(@tmpstr,ISNULL(NULLIF(CHARINDEX(@col_delimiter, @tmpstr), 0), LEN(@tmpstr)) + 1, LEN(@tmpstr))
set @input = SUBSTRING(@input,ISNULL(NULLIF(CHARINDEX(@row_delimiter, @input), 0), LEN(@input)) + 1, LEN(@input))
INSERT INTO @OutputTable ( [name] , [order] )
VALUES ( @str1 , @str2)
END
RETURN
END
GO
select * from mysplit('Content1:1,Content2:2,Content3:3', ',' , ':')