插入到表格中,从逗号分隔的 varchar 列表开始。

6 浏览
0 Comments

插入到表格中,从逗号分隔的 varchar 列表开始。

也许我没有看到问题的关键所在,但我卡住了,所以这是问题:

如何将一个逗号分隔的varchar值列表导入/插入到表中?

我不是指像这样的:

  • '12345678,87654321,11223344'

    而是这样的:

  • '12345678','87654321','11223344'

我有一个Split函数,但在这种情况下似乎无用,对吗?

这里有一个简单的(模拟SQL)示例来说明我的意思:

创建表#IMEIS(
    imei varchar(15)
)
INTO INTO #IMEIS(imei)
    SELECT * FROM('012251000362843','012251001084784','012251001168744','012273007269862','012291000080227','012291000383084','012291000448515')
SELECT * from #IMEIS
DROP TABLE #IMEIS;

谢谢您的帮助。

0
0 Comments

在这个问题中,有人想要将一个逗号分隔的varchar列表插入数据库表中。他尝试了以下的语法:INSERT INTO #IMEIS (imei) VALUES ('val1'), ('val2'), ...,但出现了问题。

问题的原因是,这种语法只在SQL Server 2008及以上版本中可用。而他所使用的SQL Server版本是2005,因此不支持这种多行构造器/表值构造器的语法。

解决这个问题的方法是,使用INSERT INTO... SELECT语句来插入值。具体的语法如下:INSERT INTO #IMEIS (imei) SELECT IMEI FROM (VALUES ('val1'), ('val2'), ...) AS tmp(IMEI)。这种方法能够绕过1000行值表达式的限制。

对于1000行值表达式的限制解决方案是使用INSERT INTO... SELECT来选择值,具体语法如:INSERT INTO #IMEIS (imei) SELECT IMEI FROM (VALUES ('val1'), ('val2'), ...) AS tmp(IMEI)。这种方法能够绕过1000行值表达式的限制。

总结起来,这个问题的原因是使用了不兼容的语法,解决方法是改用INSERT INTO... SELECT语句来插入值。

0
0 Comments

问题的原因是无法直接传递逗号分隔的varchar列表给INSERT INTO TABLE语句。作者推测可能是由其他系统生成了这些列表。如果可以稍微修改生成器,问题就可以解决。不再使用逗号分隔,而是使用union all select进行分隔,并且需要在列表前加上select关键字。最后,在子查询中为表和列提供别名。然而,根据对另一个答案的评论,如果要添加5000个条目,以上的"union all"模式可能会受到256个表每个select的限制,因此仍需要将这些值拆分为单独的语句。

解决方法是将列表拆分为多个INSERT INTO TABLE语句。以下是一个例子:

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;

作者在评论中提到,这种方法在他的情况下可以工作,即使测试了8000个值也可以,但性能很差,需要11秒。

0
0 Comments

在SQL Server中,没有内置的Split函数。通常,在所有平台上的Split函数都会将逗号分隔的字符串值拆分为单独的字符串。

在SQL Server中,Split函数的主要目的是将逗号分隔的字符串值('abc,cde,fgh')转换为一个临时表,每个字符串作为一行。

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

CREATE FUNCTION dbo.Split( varchar(8000), char(1))       
returns TABLE (items varchar(8000))       
as       
begin       
    declare int       
    declare varchar(8000)       
    select = 1       
    if len()<1 or is null return       
    while != 0       
    begin       
        set = charindex(,)       
        if !=0       
            set = left(, - 1)       
        else       
            set =        
        if(len()>0)  
            insert into (Items) values()       
        set = right(,len() - )       
        if len() = 0 break       
    end   
return       
end  

使用该Split函数的示例代码如下:

select top 10 * from dbo.split('Chennai,Bangalore,Mumbai',',')

可以在以下链接找到完整的代码:

http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx

问题的提出者已经说明他们有一个拆分函数,但他们没有一个包含逗号分隔值的单个varchar字符串。

0