SQL Server将逗号分割为表变量

时间:2016-09-21 17:07:22

标签: sql sql-server database algorithm

我正在使用SQL Server 2014,我有以下代码:

declare @listOfIDs table (id int);
insert @listOfIDs(id) values(39572),(39793);   

我想做同样的事情来做同样的结果:

declare @listOfIDs table (id int);
insert @listOfIDs(id) split('39572,39793');   

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果你的split函数是一个表函数,那么你应该使用如下的insert语句。

Insert @listofIDs(id)
Select * From split('39572,39793');

答案 1 :(得分:0)

那里有很多分割/解析功能。

这是一个

declare @listOfIDs table (id int);
insert @listOfIDs(id) Select Key_Value from [dbo].[udf-Str-Parse]('39572,39793',',')

Select * from @listOfIDs

返回

id
39572
39793

UDF(如果需要)

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimeter varchar(10))
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--       Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')

Returns @ReturnTable Table (Key_PS int IDENTITY(1,1), Key_Value varchar(max))
As
Begin
   Declare @XML xml;Set @XML = Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML)
   Insert Into @ReturnTable Select ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String)
   Return 
End
  

修改

如果您只是运行

,仅供参考
Select * from [dbo].[udf-Str-Parse]('39572,39793',',')

返回

Key_PS  Key_Value
1       39572
2       39793

我发现序列号(Key_PS)有时很有价值。