Passare parametri a una stored procedure SQL Server

Questo articolo presenta un esempio di passaggio di parametri a una stored procedure SQL Server da Visual FoxPro.

Versione originale del prodotto: Visual FoxPro
Numero KB originale: 247370

Riepilogo

Esistono due modi per passare parametri a una stored procedure usando SQLExec. Un modo, che funziona in tutte le versioni di Visual FoxPro, consiste nel compilare il comando SQL come variabile stringa. Il vantaggio di questo metodo è che è possibile controllare la stringa e vedere esattamente quale comando SQL si sta passando al back-end.

L'altro modo consiste nel passare le variabili Foxpro precedute da punti interrogativi, come in una visualizzazione con parametri. In Visual FoxPro versione 5.0 e versioni successive è possibile ottenere valori dalla stored procedure restituiti come parametri di output.

Ulteriori informazioni

attenersi alla seguente procedura:

  1. Creare due stored procedure in SQL Server (vedere la documentazione online per i passaggi esatti). Mysp_ObjectList accetta semplicemente la tabella SysObjects e restituisce il valore passato una volta per ogni record della tabella. In mysp_GetVersion viene elaborata una procedura normale per trovare la versione del server. SELECT @@VERSION in genere restituisce la versione SQL Server come record in un cursore. In questo caso, il risultato viene assegnato a un parametro di output della stored procedure.

    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. Creare un DSN denominato SPParmTest nell'amministratore ODBC, che si collega al database in cui sono state create le procedure precedenti.

  3. Eseguire il codice seguente in Visual FoxPro:

    *!* 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.