Script: ASP Du ska <b>absolut inte använda en cursor</b>. De som tipsat dig om det kan du meddela att de har fel, man ska inte använda cursors. Christoffer du är fan guld värd!!! Tack för det, det är alltid kul att kunna hjälpa till. Glöm inte visa lösningen för de som rekommenderade en cursor, det är alltid bra att kunna visa en bättre lösning än en cursor.Splitta med cursor?
Databas: SQL 2000 Server
Har två tabeller som nästan är exakt lika!
table1 och table2.
table1 har en massa värden i sig som jag vill föra
över till table2. För detta kör jag en insert from
vilket fungerar bra.
Kruxet är dock att jag har ett attribut som heter
SVAR_ID, som i table1 kan innehålla 1,2 alltså flera
värden. Jag vill vid överföringen splitta dessa så
1 och 2 hamnar i en egen rad.
Table1
===========================
ID FRAGA SVAR_ID
1 1 3
2 2 1,2
Ska alltså i Table2 bli:
===========================
ID FRAGA SVAR_ID
1 1 3
2 2 1
3 2 2
Kan jag vid inserten splitta värdet på något
smart sätt?
Har fått tips om att använda cursor men får inte
till det =(
Någon snäll som kan hjälpa?
Har pulat med detta flera veckor nu utan att få till det.Sv: Splitta med cursor?
Du behöver istället en tabell med nummer (alt. skapar du en virtuellt i själva frågan) som helt enkelt innehåller ett antal rader med siffor i följd (lika många som maxlängden på Table1.SVAR_ID). Om du inte redan har en sådan tillgänglig föreslår jag att du skapar en med t ex nedanstående kod, den är mycket användbar i vissa avancerade frågor som denna.
<code>
IF EXISTS ( SELECT * FROM sysobjects WHERE [name] = 'NUMBERS' )
DROP TABLE NUMBERS
GO
CREATE TABLE NUMBERS (n int identity(1,1), foo int)
GO
INSERT INTO NUMBERS (foo)
SELECT a.id
FROM sysobjects a, sysobjects b
GO
CREATE CLUSTERED INDEX ixcNUMBERS ON NUMBERS (n)
GO
</code>
När du nu har din nummertabell är det bara att joina mot den
<code>
INSERT INTO Table2 (FRAGA, SVAR_ID)
SELECT FRAGA, SUBSTRING(SVAR_ID, n, CHARINDEX(',', SVAR_ID+',', n) - n) AS SVAR_ID
FROM Table1
INNER JOIN NUMBERS ON n <= LEN(SVAR_ID)
WHERE SUBSTRING(','+SVAR_ID, n, 1) = ','
</code>Sv: Splitta med cursor?
Har suttit med detta problem hur länge som helst och tack
vare dig är det nu löst!
Tack så mycket!
Jag glad =DSv: Splitta med cursor?