Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 从具有多个列的逗号分隔值创建临时表_Sql_Sql Server - Fatal编程技术网

Sql 从具有多个列的逗号分隔值创建临时表

Sql 从具有多个列的逗号分隔值创建临时表,sql,sql-server,Sql,Sql Server,我试图将一个逗号分隔的字符串(如:“101:String1102:string2”)传递到存储的进程中,并从中创建一个临时表。临时表将有两列,一个整数和一个字符串。对于这个例子,它将有两行。逗号分隔行,冒号分隔两列。有人知道我怎么做吗?我正在使用sql server。提前谢谢 编辑:顺便说一下,我不是问如何创建临时表,而是问如何创建函数。您可以尝试使用临时表,而不是临时表。大概是这样的: CREATE FUNCTION ListToTable ( @list nvarchar(40

我试图将一个逗号分隔的字符串(如:“101:String1102:string2”)传递到存储的进程中,并从中创建一个临时表。临时表将有两列,一个整数和一个字符串。对于这个例子,它将有两行。逗号分隔行,冒号分隔两列。有人知道我怎么做吗?我正在使用sql server。提前谢谢

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

您可以尝试使用临时表,而不是临时表。大概是这样的:

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

输出:

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

你确定函数是你想要的吗?您不能在函数中创建临时表。您的问题主要是关于创建表还是关于拆分字符串?如果是后者,看看这个问题是否有帮助:这种不一致的原因是什么:
n[1]
/s[1]
?为什么不在这两种情况下都加上前缀
/
,或者避免在这两种情况下都使用前缀?我修复了不一致性。谢谢我尝试了不同的东西,“/”是剩下的。
n           s
----------- ---------------
101         string1
102         string2