AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / Conectores Nativos/Accesos Nativos / Conector Nativo SQL Server
  • Presentación
  • ¿Cómo proceder?
  • Etapas
  • Ejecutando el Procedure almacenado con HExecuteSQLQuery
  • Observaciones
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Conector Nativo SQL Server: Ejecutar varias veces la misma Procedure almacenada
Conectores NativosDisponible solo con este tipo de conexión
Presentación
En algunos casos, puede ser útil ejecutar la misma Procedure almacenada varias veces cambiando uno o más parámetros.
Se pueden implementar varias soluciones:
  1. Ejecute la consulta directamente (con HExecuteSQLQuery) tantas veces como sea necesario y cambie cada vez el o los parámetros deseados.
  2. Prepare la consulta a ejecutar (con HPrepareSQLQuery) así como los diferentes parámetros a modificar. A continuación, ejecute la consulta tantas veces como sea necesario con HExecuteSQLQuery. Esta solución es mucho más rápida y optimiza el tiempo que se tarda en recorrer el resultado de una consulta (consulta SELECT).
En esta página de ayuda se explica cómo se puede aplicar la segunda solución.
¿Cómo proceder?

Etapas

Para preparar y ejecutar una consulta varias veces:
  1. Declarar una fuente de datos. Esta fuente de datos contendrá el resultado de la consulta SQL.
  2. Declarar los tipos de variables de consulta.
    Las variables se recuperan en el tipo especificado en WLanguage. Las variables son variables de texto de Default.
    Por lo tanto, pueden ocurrir conversiones entre el tipo nativo de la base de datos y el tipo WLanguage, causando errores inesperados de redondeo o formato (la fecha se transforma en cadena, por ejemplo)..
    Por lo tanto, le aconsejamos que especifique los tipos de WLanguage de las variables con mucho cuidado antes de ejecutar la consulta. Para ello:
    • inicializar el valor de la Variable (tipos simples: entero, string, float).
    • especificar el tipo esperado con el escribir a máquina Property (no soportado en esta versión).
      El nombre de estas variables debe corresponder al nombre de los parámetros de Procedure en SQL Server.
      Observación: En algunos casos, el servidor no acepta realizar una conversión implícita. Se visualiza un error de conversión. En este caso, debe inicializar el tipo definiendo cualquier valor ordinario en el tipo seleccionado..
      Por ejemplo, para definir un tipo numérico, utilice MyQuery.Parameter=0.
  3. Prepara la consulta con HPrepareSQLQuery.
  4. Especifica el valor de los diferentes parámetros a tener en cuenta y ejecuta la consulta con HExecuteSQLQuery. Sólo se debe especificar el nombre de la fuente de datos que corresponde a la consulta.
Este último paso debe repetirse tantas veces como sea necesario.

Ejecutando el Procedure almacenado con HExecuteSQLQuery

HExecuteSQLQuery debe utilizarse con:
  • el nombre de la conexión,
  • la constante hQueryWithoutCorrection.
  • el nombre de la Procedure. El nombre Procedure debe ser seguido por los parámetros (incluyendo el carácter @). Para especificar los parámetros de salida, debe especificar 'out' o 'output'. Los parámetros deben estar separados por comas.
Modo compatible:
Si la consulta contiene sólo el nombre de Procedure, la Conector Nativo SQL Server añade automáticamente los parámetros de la Procedure almacenada.
Atención: Si algunos parámetros tienen un valor por defecto y si no están referenciados por el código WLanguage, se producirá un error de no referencia en la Variable. En este caso, debe modificar el código para llamar la consulta definiendo los parámetros obligatorios, o declarar explícitamente el Variable opcional.
Ejemplo:
Código para crear el Procedure:
CREATE PROCEDURE MyProc(@p1 int, @p2 int, @res int output)
AS set @res=@p1+@p2
Código para el funcionamiento de la Procedure: p1 es un parámetro obligatorio y p2 es un parámetro opcional. El siguiente código desencadena un error porque el acceso Conector Nativo esperaba p2 en la consulta:
MyProcedure is Data Source
MyProcedure.p1 = 10
IF HExecuteSQLQuery(MyProcedure, "MyConnection", ...
hQueryWithoutCorrection, "MyProc") THEN
Trace("p1=" + MyProcedure.p1)
ELSE
Error(HErrorInfo())
END
Se debe utilizar el siguiente código:
MyProcedure is Data Source
MyProcedure.p1 = 10
IF HExecuteSQLQuery(MyProcedure, "MyConnection", ...
hQueryWithoutCorrection, "MyProc @p1, @p2 out") THEN
Trace("p1=" + MyProcedure.p1)
ELSE
Error(HErrorInfo())
END

Observaciones

  • Las variables declaradas deben ser idénticas a las utilizadas. De lo contrario, se produce un error WLanguage.
  • En la llamada a la Procedure almacenada, se debe utilizar la sintaxis específica de la base de datos utilizada, incluso para la sintaxis de los parámetros. Por lo tanto, para SQL Server, los parámetros se especifican con la siguiente sintaxis: @NombreParam.
    Atención: el carácter "@" debe ir seguido de al menos una letra (la sintaxis @1 no está permitida).
    El mismo parámetro se puede utilizar varias veces. En este caso, la Variable correspondiente será reutilizada.
  • Valor de retorno (funciones):
    Para recuperar el valor de retorno, debe declarar una Variable y asignar el resultado de la función a esta Variable.
  • Para ejecutar una consulta sin activar la opción bind, utilice la constante hNoBind en HExecuteSQLQuery.
  • HPrepareSQLQuery no puede utilizarse para preparar un Procedure almacenado que devuelva registros o columnas. Se debe utilizar la función HExecuteSQLQuery.
  • La Conector Nativo SQL Server permite la re-ejecución de cualquier consulta que contenga un usuario Variable. Puede volver a ejecutar una consulta que utilice una Variable y cambiar el valor de esta Variable en cada ejecución.
    Ejemplo:
    MyProcedure is Data Source
    IF NOT HPrepareSQLQuery(MyProcedure, "MyConnection", hQueryWithoutCorrection, ...
    "SELECT * FROM AUTHORS WHERE au_lname like @p1") THEN
     Error(HErrorInfo())
    END
     
    MyProcedure.p1 = "Hemingway"
    HExecuteSQLQuery(MyProcedure)
    HReadFirst(gSource)
     
    MyProcedure.p1 = "Faulkner"
    HExecuteSQLQuery(MyProcedure)
    HReadFirst(gSource)
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 22/07/2022

Señalar un error o enviar una sugerencia | Ayuda local