Compartir a través de


Pasar parámetros a un procedimiento almacenado de SQL Server

En este artículo se presenta un ejemplo de cómo pasar parámetros a un procedimiento almacenado de SQL Server desde Visual FoxPro.

Versión original del producto: Visual FoxPro
Número de KB original: 247370

Resumen

Hay dos maneras de pasar parámetros a un procedimiento almacenado mediante SQLExec. Una manera, que funciona en todas las versiones de Visual FoxPro, es compilar el comando SQL como una variable de cadena. La ventaja de este método es que puede comprobar la cadena y ver exactamente qué comando SQL está pasando al back-end.

La otra manera es pasar las variables Foxpro precedidas de signos de interrogación, como en una vista con parámetros. En Visual FoxPro versión 5.0 y versiones posteriores, esto permite obtener valores del procedimiento almacenado que se devuelve como parámetros de salida.

Más información

Siga estos pasos:

  1. Cree dos procedimientos almacenados en SQL Server (consulte los Libros en línea para ver los pasos exactos). Mysp_ObjectList simplemente toma la tabla SysObjects y devuelve el valor que se pasa una vez por cada registro de la tabla. En mysp_GetVersion, elaboramos un poco sobre el procedimiento normal para buscar la versión del servidor. SELECT @@VERSION normalmente devuelve la versión de SQL Server como un registro en un cursor. Aquí, asignamos ese resultado a un parámetro de salida del procedimiento almacenado.

    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. Cree un DSN llamado SPParmTest en el Administrador ODBC, que se conecta a la base de datos donde creó los procedimientos anteriores.

  3. Ejecute el código siguiente en 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.