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上可用.
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*