使用包含多个列的逗号分隔值创建临时表

时间:2014-10-07 16:56:39

标签: sql sql-server

我试图传递逗号分隔的字符串,例如:" 101:string1,102:string2"进入存储过程并从中创建临时表。临时表有两列,一个整数和一个字符串。对于此示例,它将有两行。逗号分隔行,冒号分隔两列。谁知道我怎么做到这一点?我正在使用sql server。提前谢谢!

编辑:顺便说一下,我不是在询问如何创建临时表,而只是如何创建函数。

1 个答案:

答案 0 :(得分:5)

您可以尝试Table-Valued Function而不是临时表。像这样:

CREATE FUNCTION ListToTable
(   
    @list nvarchar(4000)
)
RETURNS @return TABLE 
(
   n int,
   s nvarchar(15)
)
AS
BEGIN
   SET @list = NULLIF(ltrim(rtrim(@list)),'')

   DECLARE @xml AS XML = CAST('<root><row><n>' + 
                              REPLACE(REPLACE(@list,
                                    ',', '</s></row><row><n>'),
                                    ':', '</n><s>') + 
                              '</s></row></root>' AS XML) ;

   INSERT INTO @return (n, s)
      SELECT root.row.value('n[1]', 'int')
           , root.row.value('s[1]', 'nvarchar(4000)')
        FROM @xml.nodes('/root/row') as root(row)

   RETURN
END

用法:

select * from dbo.ListToTable('101:string1,102:string2')

输出:

n           s
----------- ---------------
101         string1
102         string2