Avatar billede tknudsen Nybegynder
05. juni 2001 - 09:24 Der er 12 kommentarer og
1 løsning

cursor fra sp

Jeg kalde en sp (fra en anden server) som returnerer en række recordsets. Resultatet vil jeg gerne ha ind i en cursor. Hvordan foregår det ?

Følgende kan ikke lade sige gøre:

declare labData cursor
for select * from ServerName.sp_Name.dbo.sp_getLabData

fejlmeddelelse:
OLE DB provider \'SQLOLEDB\' does not contain table \'\"sp_Name\".\"dbo\".\"sp_getLabData\"\'.

Avatar billede tknudsen Nybegynder
05. juni 2001 - 09:25 #1
ehh - der skal sføli stå: \"Jeg vil gerne kalde...\"
Avatar billede gandalfthewhite Nybegynder
05. juni 2001 - 10:37 #2
Du skal ikke have select * from... da det er en sp du kalder.

Jeg tager selvfølgelig gerne lidt point med her, men du er også velkommen til at skrive til mig direkte på min wmdata email (som du allerede har) da det jo formentlig vedrører KKP projektet ;-)
Avatar billede tknudsen Nybegynder
05. juni 2001 - 11:18 #3
udemærket så...hvordan får jeg så fat i de data der bliver select\'ed i div sp ?

(jeg sidder ikke på min pind så hvis du vil svare her vil det være fint)

iøvrigt kunne jeg ikke få det remote server til at funge - istedet bruger jeg linked server-metoden.
Avatar billede tknudsen Nybegynder
05. juni 2001 - 11:23 #4
så du foreslår:

declare labData cursor
for ServerName.sp_Name.dbo.sp_getLabData

?
Avatar billede gandalfthewhite Nybegynder
05. juni 2001 - 11:50 #5
Jeg starter lige min kkp maskine op og laver et eksempel.
Avatar billede tknudsen Nybegynder
05. juni 2001 - 12:16 #6
jeg kan godt execute den sp via:

execute ServerName.sp_Name.dbo.sp_getLabData

så forbindelsen til den anden server er ok !
Avatar billede gandalfthewhite Nybegynder
05. juni 2001 - 13:13 #7
--Jeg var sikker på at man kunne bruge sp i en cursor declaration, men jeg kan ikke få det til at virke, så ...

CREATE TABLE #tmpFerm
    (BatchID nvarchar(50),
    TankID nvarchar(50),
    Plato float,
    Colour float,
    CO2 float,
    O2 float,
    BU float,
    AlcVol float,
    AlcMass float,
    Haze float,
    Flav float,
    TS nvarchar(25) DEFAULT NULL)

INSERT #tmpFerm
exec sp_BrightBeerGet


--Flav er en bit jeg har bare ikke fået rettet min .asp endnu.

DECLARE @BatchID nvarchar(50),
    @TankID nvarchar(50),
    @Plato float,
    @Colour float,
    @CO2 float,
    @O2 float,
    @BU float,
    @AlcVol float,
    @AlcMass float,
    @Haze float,
    @Flav float,
    @TS Nvarchar(25)

DECLARE curFerm CURSOR LOCAL FOR SELECT * FROM #tmpFerm

--Der skal være variabler til alle output fields også selv om du ikke bruger dem.

OPEN curFerm 
FETCH NEXT FROM curFerm INTO @BatchID, @TankID, @Plato, @Colour, @CO2, @O2, @BU, @AlcVol, @AlcMass, @Haze, @Flav, @TS

    WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT CAST(@BatchID AS nvarchar) + \' in tank: \' + @TankID
        PRINT \'  - Plato: \' + CAST(@Plato AS nvarchar)

        FETCH NEXT FROM curFerm INTO @BatchID, @TankID, @Plato, @Colour, @CO2, @O2, @BU, @AlcVol, @AlcMass, @Haze, @Flav, @TS
    END

CLOSE curFerm
DEALLOCATE curFerm

DROP TABLE #tmpFerm
Avatar billede gandalfthewhite Nybegynder
05. juni 2001 - 13:19 #8
I lyset af at du skal bruge cursor har jeg lavet sp_***BrightBeerGet om så du kun få de fields du har brug for. Grunden til at vi tog alle i første omgang var at hvis der senere kom nye felter til, så behøvede vi ikke lave sp om hvis du skulle bruge et nyt felt. Når du skal bruge cursor skal du kende felterne i outputtet, da cursoren eller vil fejle, så derfor ændringen. TimeStamp feltet bliver converteret til VarChar(25) i sp på min side.

Jeg laver tilsvarende ændring for Fermenter og Yeast.

Avatar billede tknudsen Nybegynder
05. juni 2001 - 14:29 #9
ok...

jeg får nu en fejl ang DTC:

MSDTC on server \'APV_INSQL\' is unavailable.

Er det ikke default startet ?
Avatar billede sunedh Nybegynder
05. juni 2001 - 21:25 #10
Nu ved jeg jo ikke hvad du laver i din stp, men hvis du bruger SQL Server 2000 kan du måske anvende en user defined function. Den er ny i SQL Server 2000 og kan returnere en variabel af typen table (ligeledes nu i SQL Server 2K).

Det er dog ikke alt der kan laves i en UDF - SE BOL for mere info - men man kan lave en

SELECT * FROM udfMyUserDefinedFunction

Ved ikke om det hjalp....?

/Sune
Avatar billede tknudsen Nybegynder
06. juni 2001 - 08:36 #11
sunehd >> det er ms sql server 7.0 jeg bruger
Avatar billede tknudsen Nybegynder
06. juni 2001 - 08:37 #12
sunedh >> ehh - sorry \'bout the name
Avatar billede tknudsen Nybegynder
06. juni 2001 - 09:20 #13
det er en service der skal startes...men den hedder ikke MSDTC som SQL Server hjælpen beskriver...den hedder blot \"Distributed Transaction Coordinator\" (gad vide hvad det-der  DTC står for ? :-)
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