AnneMCh Juniormester
25. januar 2019 - 14:36 Der er 8 kommentarer

Få output parameter fra Stored Procedure vist på asp side

Hej

jeg har en udfordring med at få output parameter tilbage fra en Stored Procedure (sql server). Jeg kan godt få fat i værdien på asp siden, hvis jeg tager den som return value, men det kan jeg ikke bruge fordi det er en int.
Den værdi jeg vil have tilbage er en type real.

Stored Procedure:
ALTER PROCEDURE [dbo].[updateFlexTimeReg]
  @update int,
  @RecordedHoursTimeReg real output, @normalHoursTimeReg real output, @MissingDaysInHoursTimeReg real output, @flexHoursTimeReg real output, @flexAccountChange real output, @userIdOut int output, @oldflexAccount real output, @newflexAccount real output
AS
  DECLARE
    @userDate date, @userInit as string_short, @dayWorkHours real, @counter int, @userId INT
   
        DECLARE flex_Cursor CURSOR FAST_FORWARD FOR
            select distinct Id from userGroup where TimeCalculation = 0
            and id = 117618
            order by id asc

        OPEN flex_Cursor;
        FETCH NEXT FROM flex_Cursor INTO @userId;
        WHILE @@FETCH_STATUS = 0
            BEGIN
                exec NormalHoursTimeReg @userId, @normalHoursTimeReg output
                exec MissingDaysInHoursTimeReg @userId, @MissingDaysInHoursTimeReg output
                exec flexHoursTimeReg @userId, @flexHoursTimeReg output
                exec RecordedHoursTimeReg @userId, @RecordedHoursTimeReg output

                select @flexAccountChange = (@RecordedHoursTimeReg - @normalHoursTimeReg) + @flexHoursTimeReg + @MissingDaysInHoursTimeReg
                select @userIdOut = @userId
                print('normalHoursTimeReg')
                print(@normalHoursTimeReg)
                print('RecordedHoursTimeReg')
                print(@RecordedHoursTimeReg)
                print('MissingDaysInHoursTimeReg')
                print(@MissingDaysInHoursTimeReg)
                print('flexHoursTimeReg')
                print(@flexHoursTimeReg)

                print('flexAccountChange')
                print(@flexAccountChange)
                print('userId')
                print(@userIdOut)

                select @oldflexAccount = flexTimeHours from userGroup where id = @userId
                select @newFlexAccount = @oldflexAccount + @flexAccountChange
                IF @update = 0
                    begin   
                        update UserGroup set oldflexTimeHours = @oldflexAccount where id = @userId
                        update UserGroup set flexTimeHours = @newflexAccount where id = @userId
                        update UserGroup set flexUpdated = GETDATE() where id = @userId
                    end
                print('@oldflexAccount')
                print(@oldflexAccount)
                print('newFlexAccount')
                print(@newFlexAccount)
                FETCH NEXT FROM flex_Cursor INTO @userId;
            END;

        CLOSE flex_Cursor;
        DEALLOCATE flex_Cursor;
                --return @newFlexAccount
arne_v Ekspert
25. januar 2019 - 14:55 #1
cmd.Parameters.Append(cmd.CreateParameter("@xxxx", adSingle, adParamOutput))
AnneMCh Juniormester
25. januar 2019 - 15:32 #2
Jeg har ikke lavet ret mange stored procedure før, så hvor skal jeg sætte sætningen ind?
arne_v Ekspert
25. januar 2019 - 15:44 #3
Det skal bruges i ASP koden der kalder den SP.
arne_v Ekspert
25. januar 2019 - 22:21 #4
Hvorfor bruger du output parametre fremfor flere result set?
arne_v Ekspert
26. januar 2019 - 04:18 #5
Eksempel:

SP:


CREATE PROCEDURE usp_return @inarg INTEGER, @outarg INTEGER OUT
AS
BEGIN
    SELECT @inarg+1 AS v
    SELECT @outarg = @inarg+2
    RETURN @inarg+3
END;
GO


ASP:


adCmdStoredProc = 4
adParamInput = 1
adParamOutput = 2
adParamReturnValue = 4
adInteger = 3
Set con = CreateObject("ADODB.Connection")
con.Open "Provider=SQLOLEDB;Data Source=ARNEPC4\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=Test;"
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "usp_return"
cmd.Parameters.Append(cmd.CreateParameter("@retval", adInteger, adParamReturnValue))
cmd.Parameters.Append(cmd.CreateParameter("@inarg", adInteger, adParamInput))
cmd.Parameters.Append(cmd.CreateParameter("@outarg", adInteger, adParamOutput))
cmd.Parameters("@inarg") = 123
Set rs = cmd.Execute
Do While Not rs.EOF
    WScript.Echo rs("v")
    rs.MoveNext
Loop
Set rs = Nothing
WScript.Echo cmd.Parameters("@outarg")
WScript.Echo cmd.Parameters("@retval")
Set cmd = Nothing
Set con = Nothing
AnneMCh Juniormester
28. januar 2019 - 13:47 #6
Min asp kode ser sådan ud, det er den metode jeg har lært og ikke andet, kan du hjælpe ud fra det?
Kan jeg i dette kald definere mine parametre som OUTPUT?

        <%dim calcParam1 (10,2)
        calcParam1(0,0)="update"
        calcParam1(0,1)=1
        calcParam1(1,0)="RecordedHoursTimeReg"
        calcParam1(1,1)=null
        calcParam1(2,0)="normalHoursTimeReg"
        calcParam1(2,1)=null
        calcParam1(3,0)="MissingDaysInHoursTimeReg"
        calcParam1(3,1)=null
        calcParam1(4,0)="flexHoursTimeReg"
        calcParam1(4,1)=null
        calcParam1(5,0)="flexAccountChange"
        calcParam1(5,1)=null
        calcParam1(6,0)="userIdOut"
        calcParam1(6,1)=null
        calcParam1(7,0)="oldFlexAccount"
        calcParam1(7,1)=null
        calcParam1(8,0)="newFlexAccount"
        calcParam1(8,1)=null
        FlexAccount=runsp("updateFlexTimeReg", calcParam1)%>
arne_v Ekspert
28. januar 2019 - 19:50 #7
Det tror jeg ikke.

Der er en runsp funktion som laver det egentligt kald. Og det ser ikke ud som om det er en mulighed at aendre paa dens opfoersel.
AnneMCh Juniormester
08. februar 2019 - 14:44 #8
Ok tak for svar.
Jeg prøver at komme rundt om udfordringen på anden vis. Tak for dine forskellige input.
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

Opret Preview

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





Computerworld
Bitcoinen nåede lige at kulminere igen – men så kom krakket
Der blev sat en ny rekord for bitcoinens værdi i år – men godt 24 timer efter blev der høvlet næsten 20.000 kroner af den.
CIO
Podcast: Her er seks gode råd om ledelse og digitalisering fra danske top-CIO'er
The Digital Edge: Vi har talt med 17 af Danmarks dygtigste digitale ledere - og samlet deres seks bedste råd om digitalisering og ledelse. Få alle rådene på 26 minutter i denne episode af podcasten The Digital Edge.
Job & Karriere
Se Waoos forklaring: Derfor har selskabet fyret topchef Jørgen Stensgaard med omgående virkning
Waaos bestyrelse opsiger fiberselskabets topchef, Jørgen Stensgaard, der fratræder med omgående virkning. Se hele forklaringen fra Waao her.
White paper
Overser du muligheder for at optimere din Dynamics-investering?
Der er omfattende og ofte oversete muligheder for at understøtte centrale forretningsprocesser med Dynamics 365 Finance & Operations. For eksempel i form af fuld EDI-integration, som optimerer logistik og forsyning. Eller ved at automatisere håndteringen af konsignation eller centrale processer vedrørende elektronisk dokumentflow og dropshipping. Læs mere i dette whitepaper, der også går i dybden med fire konkrete cases.