webForumDet fria alternativet

Göra ORDER BY (samtidigt) som man gör "ALTER TABLE"?

Databaser & SQL

2 svar · 209 visningar · startad av CokeLight

Medlem sedan juni 2000504 inlägg
Frågan#1

Hej,

jag har genererat en Identity ID kolumn så här

ALTER TABLE MyTable1
ADD TempID3 INT IDENTITY(1,1) NOT NULL

Min tabell ser t.ex. ut så här

MyTable1 (tabell)
colID
colText1
colText2
colText3
TempID3 (den nya Ident kolumnen)

Tabellen är by default är ställd till att vara ORDER BY colID kanske (jag vet inte exakt men vi antar att det är colID t.ex.), så när jag gör min ADD TempID3 så får ju vajre rad ett nytt TempID; 1,2,3..n. Men eftersom ORDER BY är baserat på colID är det "fel" rad som får TempID. Jag skulle vilja göra ORDER BY colText1 innan jag genererar Ident kolumnen så att "rätt" rad får ny siffra. Om nedanstående SQL skulle funkat hade det löst mitt problem.. :)

ALTER TABLE MyTable1 ORDER BY colText1
ADD TempID3 INT IDENTITY(1,1) NOT NULL

Orsaken till att jag håller på så här är att jag vill göra en UPDATE enl. nedan o det är viktigt i vilken ordning raderna hamnar:

UPDATE MyTable2 SET colText33 =
(
SELECT colText3 from MyTable1
WHERE MyTable1.TempID3 = MyTable2.TempID3
)

Om det var otydligt förklarat försöker jag gärna igen.. :)

Medlem sedan feb. 20011 198 inlägg
#2

Hur hade du tänkt att det skulle fungera?
Om du sorterar på colText1 varje gång du lägger in något i din tabell kommer ju TempID3 att ändras hela tiden för olika texter.

Det känns ganska meningslöst att ha ett unikt ID som ändras..
Det blir ju ungefär som att man får nytt personnummer så fort nån byter namn, föds eller dör.

Vad är det du vill åstakomma med din update?
Sätta colText33 likamed colText3 i MyTable1 där TempID3 är samma som TempID3 i MyTable2?
Varför?

Medlem sedan juni 2000504 inlägg
#3

hejsan, tack för att du vill hjälpa.. :) jo, det här är bara en engångsgrej.. syftet är egentligen att jag helt enkelt vill importera en kolumn från en tabell till en annan. När det är klart så raderar jag TempID3.

Förstår att det kanske upplevs som meningslöst.. hmm.. jag har säkert gjort fel men ska försöka förklara varför jag gjort som jag har..

Det som jag fann mest uppenbart när jag ville göra själva importen var att använda Enterprise Manager o köra DTS. Men problemet var att importen gjordes som en "append" o lades till efter den sista raden i target-kolumnen.

(efter att man specificerat kolumner o körde Transform alternativet fanns bara tre val att välja:
- Create destination table
- Delete rows in destination table
- Append rows to destination table (default)
)

så jag tänkte att jag kör kod istället för Ent.Mgr o att jag behövde ID för att kunna göra nån slag JOIN för att tvinga in raderna i början av tabellen istället för på slutet..

Man kan säkert göra det jag vill göra egentligen på helt annat sätt än det jag provade.. (fast jag vet då inte hur =)

Vet inte om det blev klarare..? förklarar gärna igen annars

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
137 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
137 ms — ändringar (db)