Indsæt CSV i Database

Nogle gange har man en kommasepareret værdi (CSV) som man gerne vil indsætte i sin database som nye rækker. Jeg søgte lidt på nettet og fandt en artikel hos SQLTeam.com om Parsing CSV Values Into Multiple Rows.

Artiklen beskriver hvordan man kan indsætte individuelle ord fra f.eks. Shakespeare som nye rækker. Det var lidt det jeg ledte efter, men jeg manglede blandt andet en tally tabel (en sekventiel liste af numre man kan bruge som f.eks. index). Så her er min modificerede version af scriptet jeg fandt.

Start med at oprette variabler – herunder en midlertidig tabel i hukommelsen (Kun MS-SQL 2000+).

set nocount on — Husk den hvis du skal bruge SQL’en i ASP
declare @RandomList varchar(1000)
declare @Tally table(id int) — Hvis man har en MS-SQL 7 kan man lave en midlertidig tabel med Create Table #…
declare @i int

Herefter skal @Tally fyldes med tal, men da den skal gennemløbe op til længden af @RandomList – som er på op til 1000 karakterer er det smart at løbe op til dens størrelse. Så jeg starter lige med at fylde noget data i den.

set @RandomList = ’2717,1636,2187,3453,2814,3470,1882,3425,3443,2477′

Og så skal @Tally fyldes.

Set @i = 1
WHILE @i <= len(@RandomList)
BEGIN
Insert Into @Tally Values (@i)
Set @i = @i + 1
END

Og så kan vi vise indholdet af @RandomList som individuelle rækker (som kan indsættes i en ny tabel).

SELECT
SubString(‘,’ + @RandomList + ‘,’ , ID , CharIndex(‘,’ , ‘,’ + @RandomList + ‘,’ , ID) – ID) AS Individual_CSV_Value
FROM
@Tally
WHERE
ID <= Len(',' + @RandomList + ',')
AND SubString(',' + @RandomList + ',' , ID - 1, 1) = ','

Hvis du kunne lide dette lille script eller har nogle kommetarer må du meget gerne smide en kommentar (Eller et trackback ping).

Læg et svar