SQL Management Studio Stored Procedure ansprechen

  • VBScript

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Ovoxo.

    SQL Management Studio Stored Procedure ansprechen

    Hallo zusammen

    Ich habe eine Procedure im SQL Management Studio 2012 die ich gerne via VBScript ausführen würde.

    Was ich hauptsächlich fragen will:

    - Wie kann ich die Procedure ansprechen und ausführen?
    - Wie kann ich der Procedure Parameter übergeben?

    Ich habe bereits im Google gesucht und leider nichts definitives gefunden.
    Was ich gefunden habe ist dies, doch leider bekomme ich immer ein Fehler das "objCommandSec " die falsche Anzahl an Argumenten hat, obwohl die stimmen müsste.

    Quellcode

    1. Set Conn = CreateObject("ADODB.Connection")
    2. Conn.Open "xxx"
    3. Set objCommandSec = CreateObject("ADODB.Command")
    4. objCommandSec.ActiveConnection = Conn
    5. objCommandSec.CommandType = 4
    6. objCommandSec.CommandText = "theStoredProc "
    7. objCommandSec.Parameters.Refresh
    8. objCommandSec.Parameters(2) = "someValue"
    9. objCommandSec.Execute
    10. MsgBox(objCommandSec.Parameters(3))

    Naja nun habe ich einige Zeilen wie diese

    Quellcode

    1. objCommandSec.parameters.append objCommandSec.createParameter("@Zahldatum",7,1, Now)


    Jetzt erhalte ich den Fehler, dass @Zahldatum als Parameter erwartet wird aber nichts übergeben wird.
    Jedoch weiss ich nicht warum dieser Fehler entsteht.
    Use the CreateParametermethod to create Parameter objects with the appropriate property settings and use the Append method to add them to the Parameters collection
    Quelle: msdn.microsoft.com/en-us/libra…op/ms675869(v=vs.85).aspx

    Nachschlagewerk für die Konstanten:
    support.webecs.com/kb/a237/whe…nstants-for-vbscript.aspx
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Quellcode

    1. With objCommandSec
    2. .ActiveConnection = Cn
    3. .CommandType = 4
    4. .CommandText = "[dbo].[Fs_Beleg_ZahlungsEingangVariabel]"
    5. .parameters.append .createParameter("@sUser",202,1,40, "'Administrator'")
    6. .parameters.append .createParameter("@sBelegrecordid",200,1,40, belegRecordid(0))
    7. .parameters.append .createParameter("@sZahlwegRecordid",200,1,40, belegRecordid(4))
    8. .parameters.append .createParameter("@Zahldatum",135,1,20, Now())
    9. .parameters.append .createParameter("@sSessionID",200,1,40, zahlHistory(2))
    10. Set testing = .createParameter("@Zahlsumme",131,1,40, CDbl(200.50))
    11. testing.Precision = 2
    12. testing.NumericScale = 3
    13. .Parameters.Append testing
    14. .execute
    15. End With


    Sieht so aus.
    Zurzeit erhalte ich immer den Fehler "The scale is invalid."

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Ovoxo“ ()

    Wenn ich diese Zeilen weglasse, erhalte ich den Fehler "Precision invalid"

    Ich habe nun versucht die werte von "Precision" und "NumericScale" zu tauschen, da ich gemerkt habe, dass ich diese falsch angewendet habe.
    Nun erhalte ich den Fehler "error converting data type varchar to numeric"
    Der einzige erwartete Numerische Wert ist dieser

    Quellcode

    1. Set testing = .createParameter("@Zahlsumme",131,1,40, CDbl(200.50))


    und dieser sollte korrekt sein.
    Okey dieses Problem habe ich gelöst.
    Ich hatte die Parameter in einer falschen Reihenfolge übergeben..

    Nun habe ich das nächste Problem.
    Ein paar Felder sind GUID's von der Prozedur werden diese als varchar(40) erwartet und werden dann in eine GUID konvertiert.
    Doch nun erhalte ich diese Fehlermeldung "conversion failed when converting from a character string to uniqueidentifier"

    Quellcode

    1. With objCommandSec
    2. .ActiveConnection = Cn
    3. .CommandType = 4
    4. .CommandText = "[dbo].[Fs_Beleg_ZahlungsEingangVariabel]"
    5. .parameters.append .createParameter("@sUser",8,1,40, "'Administrator'")
    6. .parameters.append .createParameter("@sBelegrecordid",8,1,40, belegRecordid(0))'GUID
    7. .parameters.append .createParameter("@sZahlwegRecordid",8,1,40, belegRecordid(4)) 'GUID
    8. .parameters.append .createParameter("@Zahldatum",135,1,20, Now())
    9. test = CDbl(200.50)
    10. if(IsNumeric(test)) then
    11. Set testing = .createParameter("@Zahlsumme",131,1,20,test)
    12. testing.Precision = 12
    13. testing.NumericScale = 2
    14. .Parameters.Append testing
    15. else
    16. MsgBox("Not Numeric")
    17. END IF
    18. .parameters.append .createParameter("@sSessionID",8,1,40, zahlHistory(2)) 'GUID
    19. .parameters.append .createParameter("@sZahlhistID",8,1,40,belegRecordid(0)) 'GUID
    20. .parameters.append .createParameter("@sKontenBuchungID",8,1,40,belegRecordid(0)) 'GUID
    21. .parameters.append .createParameter("@sZuatzInfo",8,1,40,"")
    22. .parameters.append .createParameter("@Auszugnr",3,1,40,0)
    23. .parameters.append .createParameter("@sBelegidVer",8,1,40,"")
    24. .parameters.append .createParameter("@sZahlungshistorieIDVer",8,1,40,"")
    25. .execute
    26. End With
    Das mit dem Numeric hat sich gelöst.
    Mein Problem liegt bei den Zeilen, die ich mit "Guid" kommentiert habe.
    Fehlermeldung "conversion failed when converting from a character string to uniqueidentifier"
    Erwartet wird ein Varchar(40)

    SQL-Abfrage

    1. @sUser as nvarchar(40) ,
    2. @sBelegrecordid as varchar(40) ,
    3. @sZahlwegRecordid as varchar(40) ,
    4. @Zahldatum as datetime ,
    5. @Zahlsumme as numeric(12,2) = 0 ,
    6. @sSessionID as varchar(40) = NULL ,
    7. @sZahlhistID as varchar(40) = NULL ,
    8. @sKontenBuchungID as varchar(40) = NULL ,
    9. @sZuatzInfo as nvarchar(250) = NULL ,
    10. @Auszugnr as Int = NULL ,
    11. @sBelegidVer as nvarchar(40) = NULL ,
    12. @sZahlungshistorieIDVer as nvarchar(40) = NULL

    Nein er ist als Varchar deklariert und wird zu einem UNIQUEIDENTIFIER umgewandelt.

    Beispiel hier

    SQL-Abfrage

    1. Declare @BelegRecordid as uniqueidentifier
    2. Set @BelegRecordid = (Select dbo.ConvertVarcharToUnique(@sBelegrecordid) )


    Ich hab schon jenste Wege ausprobiert um den Wert als String zu übergeben, mit CStr, Hochkommas und etc.
    Die Werte in belegRecordid(0) sind/waren auch UNIQUEIDENTIFIER die ich mit einem Select von einer Tabelle geholt habe.
    Die {} welche mitgeliefert werden, habe ich auch entfernt.
    Habe diese Problem gelöst.
    Die Umwandlungsfunktion im SQL hat erwartet, dass ich die GUID ohne "-" übergebe.

    Aber nun das nächste Problem.
    Mein Script hat ca. 100 verschiedene Werte, dass heisst, die Prozedur wird 100x aufgerufen.
    Nach dem dritten Aufruf, stürzt der Windows Based Script Host ab.