Avatar billede decrypto Nybegynder
24. marts 2006 - 15:12 Der er 8 kommentarer og
1 løsning

T-SQL spørgsmål

Hvis jeg har en query, der i min stored proc returnerer mig et antal poster, hvordan kan jeg løbe sådan igennem i min stored proc og smide en nøgle værdi over i en streng separeret med ';' fx?
Avatar billede arne_v Ekspert
24. marts 2006 - 15:19 #1
du kan aabne en cursor for din query

men den slags er normalt meget hurtigere i din app kode
Avatar billede decrypto Nybegynder
24. marts 2006 - 18:39 #2
Ok, sagen er at jeg har en transaktionel st. proc. som blive kaldt med et argument, der er en komma separeret streng af id'er (IdA).

Udover dette argument kaldes st. proc desuden med et andet id(IdB), som jeg skal bruge til at slå op i en anden tabel. Dette opslag i den anden tabel returnerer mig en række poster, som er een kolonne med en masse andre ID'er(IdC).

Nu kommer det egentlige.

For hver enkelt returværdi (IdC) fra opslaget skal jeg indsætte IdC i en tabel sammen med de antal kommasepareret id'er (IdA).

Alt dette i een transaktion.

Af en kollega har jeg fået at vide, at jeg skal smide streng id'erne splittet op en efter en og smide dem i en tmpTabelA. Dette er lykkedes.

Derefter skal jeg smide returvæærdierne fra opslaget i en anden tmpTabelB.

Nu har jeg to tmp tabeller, udfra jeg så burde kunne lave min INSERT INTO statement, uden behov for løkker.

som i virkeligheden ville være:
INSERT INTO dbo.SchemaField (IdC_1,IdA_1)
INSERT INTO dbo.SchemaField (IdC_1,IdA_2)
INSERT INTO dbo.SchemaField (IdC_1,IdA_3)

I en løkke hvor IdC så i næste løkke ville være IdC_2
INSERT INTO dbo.SchemaField (IdC_2,IdA_1)
INSERT INTO dbo.SchemaField (IdC_2,IdA_2)
INSERT INTO dbo.SchemaField (IdC_2,IdA_3)

etc.

Jeg har fået at vide, at jeg kan spare løkken ved blot at skrive noget lignende:

INSERT INTO dbo.SchemaField (SELECT IDC FROM tmpTabelB, SELECT IDA FROM tmpTabelA)

Men dette virker ikke, måske gal syntaks.

Er jeg helt ved siden af, eller er der andre med bedre forslag?
Avatar billede decrypto Nybegynder
24. marts 2006 - 18:51 #3
Den specielle INSERT skulle efter sigende, være i stand til at insætte kombinationerne.

Men jeg skal have noget hjælp fra eksperterne :o)
Avatar billede decrypto Nybegynder
24. marts 2006 - 20:45 #4
Min INSERT ser nogenlunde således ud:

INSERT dbo.SchemaField (FK_BrandInitiativeID, FK_SchemaID, FK_MediaID, AllocatedBudget) SELECT FK_BrandInitiativeID FROM #tmpBrandInitiative @schemaID SELECT FK_MediaID FROM #tmpMedia Null
Avatar billede decrypto Nybegynder
24. marts 2006 - 20:46 #5
Men mine argumenter i min INSERT virker ikke, jeg har har prøvet at sætte komma mellem mine parametre:

SELECT FK_BrandInitiativeID FROM #tmpBrandInitiative, @schemaID, SELECT FK_MediaID FROM #tmpMedia, Null

Men det virker ikke, hvad mangler jeg????
Avatar billede decrypto Nybegynder
24. marts 2006 - 20:57 #6
Jeg har fundet et eksempel, der ligner lidt min situation, men her bliver værdierne, der skal indsættes, jo hentet fra een tabel.

I min situation har jeg, to tmp tabeller jeg vil hente værdier fra, samt en en @variable, og en Null
Avatar billede arne_v Ekspert
24. marts 2006 - 21:50 #7
INSERT INTO dbo.SchemaField SELECT IDC,IDA FROM tmpTabelB JOIN tmpTabelA ON tmpTabelA.x=tmpTabelB.x

maaske, men jeg er ikke helt klar over hvad x er
Avatar billede decrypto Nybegynder
24. marts 2006 - 22:08 #8
Jeg fik det til at virke:

Jeg lavede bare nogle flere tmp tabeller og smed værdierne ned i dem hvorefter de blev selected.
Avatar billede decrypto Nybegynder
11. maj 2006 - 15:15 #9
Jeg lukker denne
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester