Übergeben von Parametern an eine SQL Server gespeicherte Prozedur

In diesem Artikel wird ein Beispiel für die Übergabe von Parametern an eine SQL Server gespeicherte Prozedur von Visual FoxPro vorgestellt.

Ursprüngliche Produktversion: Visual FoxPro
Ursprüngliche KB-Nummer: 247370

Zusammenfassung

Es gibt zwei Möglichkeiten, Parameter mithilfe von SQLExec an eine gespeicherte Prozedur zu übergeben. Eine Möglichkeit, die in allen Versionen von Visual FoxPro funktioniert, besteht darin, den SQL-Befehl als Zeichenfolgenvariable zu erstellen. Der Vorteil dieser Methode besteht darin, dass Sie die Zeichenfolge überprüfen und genau sehen können, welchen SQL-Befehl Sie an das Back-End übergeben.

Die andere Möglichkeit besteht darin, die Foxpro-Variablen zu übergeben, denen Fragezeichen vorangestellt sind, wie in einer parametrisierten Sicht. In Visual FoxPro Version 5.0 und höheren Versionen können Sie so Werte aus der gespeicherten Prozedur abrufen, die als Ausgabeparameter zurückgegeben werden.

Weitere Informationen

Gehen Sie folgendermaßen vor:

  1. Erstellen Sie zwei gespeicherte Prozeduren in SQL Server (die genauen Schritte finden Sie in der Onlinedokumentation). Mysp_ObjectList verwendet lediglich die SysObjects-Tabelle und gibt den Wert zurück, den Sie einmal für jeden Datensatz in der Tabelle übergeben. In mysp_GetVersion erläutern wir ein wenig das normale Verfahren zum Ermitteln der Version des Servers. SELECT @@VERSION gibt normalerweise die SQL Server Version als Datensatz in einem Cursor zurück. Hier weisen wir dieses Ergebnis einem Ausgabeparameter der gespeicherten Prozedur zu.

    CREATE PROCEDURE mysp_GetVersion @tcVersion Char(200) Output AS 
    SELECT @tcVersion = @@VERSION
    
    CREATE PROCEDURE mysp_ObjectList @tcParm1 CHAR(10) AS
    SELECT @tcParm1, name FROM sysobjects
    
  2. Erstellen Sie einen DSN mit dem Namen SPParmTest im ODBC-Administrator, der mit der Datenbank verknüpft ist, in der Sie die oben genannten Prozeduren erstellt haben.

  3. Führen Sie den folgenden Code in Visual FoxPro aus:

    *!* Error-checking is omitted for the purposes of this sample:
    *!* you should always check the return values from SQL Passthrough calls.
    lnConn = SQLCONNECT("SPParmTest")
    lcParm1 = "ReturnThis"
    lcParm2 = "Then This"*!* This is the first way, involving building a string 
    *!* containing the parameters.
    lcCommand = "exec mysp_ObjectList '" + lcParm1 + "'"
    =SQLEXEC(lnConn, lcCommand)
    BROWSE
    USE
    
    *!* This is the second way, passing the FoxPro variables directly to 
    *!* the SQL command. This will work in 3.0.
    lcCommand = "exec mysp_ObjectList ?lcParm2"
    =SQLEXEC(lnConn, lcCommand)
    BROWSE
    USE
    
    *!* To get a value back from a stored procedure, initialize the
    *!* output variable first. This won't work under 3.0.
    lcVersion = SPACE(200)
    lcCommand = "exec mysp_GetVersion ?@lcVersion" && Note the pass by reference.
    =SQLEXEC(lnConn, lcCommand)?lcVersion 
    
    =SQLDISCONNECT(lnConn) && clean up.