Stored Procedure mit einem Skript updaten

  • VBScript

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Stored Procedure mit einem Skript updaten

    Mahlzeit,

    Ich habe momentan folgendes Problem:

    Ich möchte mit einem Skript eine Procedure auf einem SQL-Server updaten. Nur leider bekomme ich keine Ausgabe auf meinem Zielserver.

    Dim conn, rst, SQL_Table

    Set conn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")

    Conn.Open "Connectionstring "

    ....

    Set rst = conn.Execute(SQL_Table)

    Set rst = Nothing
    Set cmd = Nothing



    An der Stelle der drei Punkte steht momentan

    SQL_Table = "UPDATE [Name der Datenbank] Set [Name der Variablen getrennt durch ein Komma]


    Ausgeführt wird das Skript auf einem Siemens WINCC RT Client v14.

    Die Frage wäre jetzt, was genau fehlt mir bzw wieso wird die Procedure nicht "beschrieben" oder ausgeführt? Wäre da ein kluger Kopf anwesend, der mir einen Schritt weiter helfen könnte?

    Einen angenehmen Tag

    robertII
    Möchtest du tatsächlich den Inhalt der Stored Procedure ändern?

    Woher hast du das?

    VB.NET-Quellcode

    1. ​SQL_Table = "UPDATE [Name der Datenbank] Set [Name der Variablen getrennt durch ein Komma]


    Das hat ja nix mit einer Stored Procedure zu tun. Wenn du eine Stored Procedure ändern willst dann bräuchtest du ja irgendeinen Code der anstelle der aktuellen Stored Procedure gespeichert werden soll.
    Wenn überhaupt dann ginge es mit einem ADODB.Command

    Etwas so aus dem Kopf:

    VB.NET-Quellcode

    1. Set cmd = CreateObject("ADODB.Command")
    2. sql = "ALTER PROCEDURE proc_Test AS Select 1"
    3. cmd.CommandText = sql
    4. cmd.execute
    Das ist meine Signatur und sie wird wunderbar sein!
    ​UPDATE [Name der Datenbank] Set [Name der Variablen getrennt durch ein Komma]

    Setzt du da nur die Namen der Variablen oder weißt du denen auch Werte zu??
    Und immer schön String von Nummern trennen -> Text: '123' Nummer: 123

    Kommt sonst irgendwie ein Fehler?

    LG, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    Mono schrieb:

    Möchtest du tatsächlich den Inhalt der Stored Procedure ändern?

    Woher hast du das?

    VB.NET-Quellcode (1 Zeile)

    Das hat ja nix mit einer Stored Procedure zu tun. Wenn du eine Stored Procedure ändern willst dann bräuchtest du ja irgendeinen Code der…


    Das "UPDATE" habe ich von der Microsoft-Seite... Es heißt nicht, dass es richtig ist.
    Eventuell habe ich mich auch falsch ausgedrückt... Das Ziel ist die Parameter an die SP zu übergeben und dann zwischen 2 SQL-Servern die Werte hin und her zuschreiben. Der Ablauf würde sein, dass der "neue" SQL-Server mit der Procedure die Werte an einen anderen übergibt.
    Mit dem cmd habe ich schon gearbeitet, nur hat dies nicht zu dem gewünschten Erfolg geführt. Werde es aber nochmal probieren und bei Microsoft schauen, wie die Syntax ist.

    Danke erstmal !

    Acr0most schrieb:

    <code class="inlineCode">UPDATE [Name der Datenbank] Set [Name der Variablen getrennt durch ein Komma] </code>

    Setzt du da nur die Namen der Variablen oder weißt du denen auch Werte zu??
    Und immer schön String von Nummern trennen -&gt; Text: '123' Nummer: 123

    Kommt sonst irgendwie…


    Der String Sieht wie folgt aus:

    SQL_Table = "UPDATE Datenbank @Set ='1', @Name = 'B113', @User = 'TestUser' "


    Auf dem "neuen" Server lasse ich auch einen Trace laufen und erkenne so , dass die Befehle zumindest abgearbeitet werden.... leider werden sie nicht richtig ausgeführt.

    Danke für eure Mühe

    robertII
    Sorry ich verstehe nach wie vor nicht was du möchtest.

    Wenn du eine Stored Procedure aufrufen willst mit Parametern geht das entweder über den ADO Command mit

    Visual Basic-Quellcode

    1. set cmd = CreateObject("ADODB.Command")
    2. cmd.CommandType = 4
    3. cmd.CommandText = my_proc
    4. cmd.Parameters.Append cmd.CreateParameter("@MyParam", adVarWChar, adParamInput, 50, "test")
    5. cmd.execute
    6. oder direkt über die Connection geht es auch (aber keine SQL Injection Protection)
    7. [vb]
    8. Set conn = CreateObject("ADODB.Connection")
    9. Set rst = CreateObject("ADODB.Recordset")
    10. conn.open
    11. Set rst = conn.execute "exec myProc 'test', 2"
    12. 'hier mit dem Recordset weiter arbeiten:
    13. Do While not rst.EOF
    14. msgbox rst("spaltenname")
    15. rst.movenext
    16. Loop
    Das ist meine Signatur und sie wird wunderbar sein!
    Die erste Methode habe ich schon ausprobiert jedoch ohne Erfolg. Morgen wird meiner erste Handlung auch gleich der Anruf beim Siemens Support sein, weil viele Funktionen einfach nicht unterstützt werden.


    Danke erstmal! Werde mich dem Problem morgen wieder annehmen und gebe dann eine Rückmeldung.

    Mit freundlichen Grüßen

    robertII
    "Ohne Erfolg" heißt was?
    Du hast ja keine Fehlermeldung.

    Visual Basic-Quellcode

    1. SQL_Table = "UPDATE [Name der Datenbank] Set [Name der Variablen getrennt durch ein Komma]


    Das hier wird nicht funktionieren. Bei einem SQL Server ist UPdate für eine Tabelle. Du scheinst mir irgendwie etwas verwirrt oder nicht ganz klar bezüglich den Begrifflichkeiten..

    Für ein UPDATE Statement kann man zb:

    Visual Basic-Quellcode

    1. UPDATE DATABASE.SCHEMA.TABLENAME set Column = Value where ..
    Das ist meine Signatur und sie wird wunderbar sein!
    Danke für deine Mühen.

    Visual Basic-Quellcode

    1. SQL_Table = "UPDATE [Name der Datenbank] Set [Name der Variablen getrennt durch ein Komma]

    Ich erhalte (noch) keine Fehlermeldung. Ohne Erfolg heißt bei mir gerade, dass ich noch keinen Schreibvorgang ausführen konnte. Die Befehle werden zwar im Trace aufgezeichnet, jedoch werden sie nicht ausgeführt bzw richtig abgearbeitet.


    Visual Basic-Quellcode

    1. UPDATE DATABASE.SCHEMA.TABLENAME set Column = Value where ..

    Wird von Siemens nicht untersützt...Ich bekomme mit denen noch einen Vogel.


    Ein Grundsatzfrage hätte ich jedoch noch, nachdem der Support bei Siemens mich auch nicht weitergebracht hat:

    SQL-Abfrage

    1. CREATE PROCEDURE [dbo].[Leermeldung]
    2. @SET Bit = 0,
    3. @Silo_Name VARCHAR(50),
    4. @User NVARCHAR(50) = 'KNU'
    5. AS


    Es ist nicht möglich diese Code via vbs zu beschreiben. Verstehe ich das richtig oder falsch!?
    Doch das geht wie schon beschrieben:

    Visual Basic-Quellcode

    1. Dim conn, sql
    2. Set conn = CreateObject("ADODB.Connection")
    3. conn.ConnectionString="Provider=SQLNCLI11;Integrated Security=SSPI;Initial Catalog=DBName;Data Source=Server\InstanceName;" ' hier muss der korrekte Connection String rein mit dem korrekten Provider
    4. conn.Open
    5. sql = "ALTER PROCEDURE proc_Test AS Select 2"
    6. conn.Execute sql
    7. conn.close
    8. set conn = Nothing


    Der User (in dem Fall Windows Auth.) muss natürlich die Berechtigung haben
    Das ist meine Signatur und sie wird wunderbar sein!