木のために木が見えないかもしれませんが、私は立ち往生しているので、ここに質問があります:
コンマ区切りのvarchar-valuesのリストをテーブルにインポート/挿入するにはどうすればよいですか?私はこのようなことを意味するものではありません:
'12345678,87654321,11223344'
でもこれは:'12345678','87654321','11223344'
Split
- Functionがありますが、この場合は役に立たないようです。
ここに私が意味することを示す簡単な(モック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;
前もって感謝します。
この「コンマで区切られたvarcharのリスト」を単に渡す方法がないので、他のシステムがそれらを生成していると思います。ジェネレータをわずかに変更できる場合は、実行可能であるはずです。コンマで区切るのではなく、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;
ただし、追加する5000エントリについて、別の回答へのコメントに注目してください。 選択ごとに256テーブル の制限は上記の「すべてを結合」パターンで開始される可能性があるため、これらの値を別のステートメントに分割する必要があります。
このような何かが動作するはずです:
INSERT INTO #IMEIS (imei) VALUES ('val1'), ('val2'), ...
更新:
どうやらこの構文は、SQL Server 2008以降でのみ使用可能です。
Sql Serverには(私の知る限りでは)組み込みのSplit関数がありません。一般に、すべてのプラットフォーム上の分割関数は、個々の文字列に分割されるコンマ区切りの文字列値を持ちます。 SQLサーバーでは、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
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