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