从逗号分隔的varchar-list插入INTO TABLE

Tim*_*ter 27 sql t-sql sql-server-2005 insert

也许我没有看到树木,但我被卡住了,所以问题是:

如何将逗号分隔的varchar值列表导入/插入到表中?我的意思不是这样的:

  • '12345678,87654321,11223344' 但是这个:
  • '12345678','87654321','11223344'

我有一个Split功能,但在这种情况下似乎没用,不是吗?

这是一个简单的(模拟SQL)示例来显示我的意思:

Create Table #IMEIS(
    imei varchar(15)
)
INTO INTO #IMEIS(imei)
    SELECT * FROM ('012251000362843', '012251001084784', '012251001168744', '012273007269862', '012291000080227', '012291000383084', '012291000448515')
SELECT * from #IMEIS
DROP TABLE #IMEIS;
Run Code Online (Sandbox Code Playgroud)

先感谢您.

And*_*jão 47

这样的事情应该有效:

INSERT INTO #IMEIS (imei) VALUES ('val1'), ('val2'), ...
Run Code Online (Sandbox Code Playgroud)

更新:

显然,此语法仅在SQL Server 2008上可用.

  • SQL Server 2005的"VALUES"不支持多行构造函数/ [表值构造函数](http://msdn.microsoft.com/en-us/library/dd776382.aspx)(从2008起支持) (2认同)

Dam*_*ver 14

由于没有办法只传递这个"逗号分隔的varchars列表",我假设其他系统正在生成它们.如果你可以略微修改你的发电机,它应该是可行的.不是用逗号分隔,而是分开union all select,并且需要select在列表前加上一个.最后,您需要为子选择中的表和列提供别名:

Create Table #IMEIS(
    imei varchar(15)
)
INSERT INTO #IMEIS(imei)
    SELECT * FROM (select '012251000362843' union all select '012251001084784' union all select '012251001168744' union all
                   select '012273007269862' union all select '012291000080227' union all select '012291000383084' union all
                   select '012291000448515') t(Col)
SELECT * from #IMEIS
DROP TABLE #IMEIS;
Run Code Online (Sandbox Code Playgroud)

但请注意您对另一个答案的评论,即要添加5000个条目.我相信每个选择限制的256个表可以使用上面的"union all"模式,所以你仍然需要将这些值拆分成单独的语句.


rah*_*rma 10

Sql Server没有(据我所知)具有内置的Split功能.通常在所有平台上的拆分功能都将以逗号分隔的字符串值拆分为单独的字符串.在sql server中,Split函数的主要目标或必要是将逗号分隔的字符串值('abc,cde,fgh')转换为临时表,每个字符串为行.

下面的Split函数是表值函数,它可以帮助我们将逗号分隔(或任何其他分隔符值)字符串拆分为单个字符串.

CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))       
returns @temptable TABLE (items varchar(8000))       
as       
begin       
    declare @idx int       
    declare @slice varchar(8000)       

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)       

        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return       
end  
Run Code Online (Sandbox Code Playgroud)

从dbo.split('Chennai,Bangalore,Mumbai',',')中选择前10*

完整版可以在以下链接中 找到http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx

  • OP已经声明它们具有split函数,但它们没有包含逗号分隔值的单个varchar (3认同)