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
  • Ejemplo 1: Almacenado Procedure con el parámetro de retorno
  • 1. Declaración de la fuente de datos
  • 2. Declarando las variables utilizadas por la Procedure
  • 3. Ejecutando el Procedure almacenado y recuperando el resultado
  • Ejemplo 2: Función de almacenamiento con valor de retorno
  • 1. Declaración de la fuente de datos
  • 2. Declarando las variables utilizadas por la Procedure
  • 3. Ejecutando el Procedure almacenado y recuperando el resultado
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: Recuperar el valor de salida de un Procedure almacenado
Conectores NativosDisponible solo con este tipo de conexión
Presentación
La Conector Nativo SQL Server está acostumbrada a:
  • especificar los valores de entrada durante la llamada a un Procedure almacenado.
  • recuperar los valores de salida después de una llamada a un Procedure almacenado.
¿Cómo proceder?

Etapas

Para especificar y recuperar los valores cuando se ejecuta una consulta de "Procedure almacenado", debe:
  1. Declarar una fuente de datos. Esta fuente de datos contendrá el resultado de los datos almacenados de SQL Procedure.
  2. Declarar las variables del Procedure almacenado (variables de entrada y variables de salida).
    Las variables se recuperan en el tipo especificado en WLanguage. Las variables son variables de texto de Default.
    Por lo tanto, pueden producirse conversiones entre el tipo nativo de la base de datos y el tipo WLanguage. Estas conversiones pueden causar errores inesperados de redondeo o formato (por ejemplo, una fecha convertida en un string)..
    Por lo tanto, le aconsejamos que especifique los tipos de variables de WLanguage con mucho cuidado antes de ejecutar el Procedure almacenado. 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. Ejecuta el Procedure almacenado con HExecuteSQLQuery.

Ejecutando el Procedure almacenado con HExecuteSQLQuery

HExecuteSQLQuery debe utilizarse con:
  • el nombre de la conexión,
  • la constante hQueryWithoutCorrection
  • el nombre de la Procedure, seguido de 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 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.
  • No se puede recuperar un Procedure almacenado que devuelve registros (SELECCIONE ... FROM ...), columns.
  • Valor de retorno (funciones): Para recuperar el valor de retorno, debe declarar un Variable y asignar el resultado de la función a este Variable.
  • Para ejecutar una consulta sin activar la opción bind, utilice la constante hNoBind en HExecuteSQLQuery.
  • Uso de RAISERROR: Los errores cuya gravedad es superior a 10 son errores fatales. Por lo tanto, no se genera ningún error por RAISERROR para un error cuya gravedad es menor o igual a 10.
Ejemplo 1: Almacenado Procedure con el parámetro de retorno
El Procedure almacenado llamado MyProc devuelve la suma de @p1 y @p2 en @res. El valor de retorno es 2*@res.
El código utilizado para crear esta Procedure en el servidor es el siguiente:
CREATE PROCEDURE MyProc(@p1 int, @p2 int, @res int output)
AS select @res=@p1+@p2
return 2*@res

1. Declaración de la fuente de datos

La fuente de datos se utiliza para manipular las variables del Procedure que deben ser ejecutadas.
MyProcedure is Data Source

2. Declarando las variables utilizadas por la Procedure

Las variables que maneja el Procedure se declaran desde la fuente de datos.
MyProcedure.p1 = 10
MyProcedure.p2 = 20
Observación: No es necesario declarar todas las variables utilizadas. En este ejemplo, la variable utilizada para recuperar el resultado de la Procedure no se declara.

3. Ejecutando el Procedure almacenado y recuperando el resultado

Para ejecutar la Procedure almacenada, basta con utilizar HExecuteSQLQuery:
IF HExecuteSQLQuery(MyProcedure, "MyConnection", hQueryWithoutCorrection, ...
"MyProc @p1,@p2,@res out") THEN
Trace("res=" + MyProcedure.res)
Trace("p1=" + MyProcedure.p1)
Trace("p2=" + MyProcedure.p2)
ELSE
Error(HErrorInfo())
END
Ejemplo 2: Función de almacenamiento con valor de retorno
La función almacenada llamada MyProc devuelve la suma de @p1 y @p2in @res. El valor de retorno es 2*@res.
El código utilizado para crear esta Procedure en el servidor es el siguiente:
CREATE PROCEDURE MyProc(@p1 int, @p2 int, @res int output)
AS select @res=@p1+@p2
return 2*@res

1. Declaración de la fuente de datos

La fuente de datos se utiliza para manipular las variables del Procedure que deben ser ejecutadas.
MyProcedure is Data Source

2. Declarando las variables utilizadas por la Procedure

Las variables que maneja el Procedure se declaran desde la fuente de datos.
MyProcedure.p1 = 10
MyProcedure.p2 = 20
Observación: No es necesario declarar todas las variables utilizadas. En este ejemplo, la variable utilizada para recuperar el resultado de la Procedure no se declara.

3. Ejecutando el Procedure almacenado y recuperando el resultado

Para ejecutar la Procedure almacenada, basta con utilizar HExecuteSQLQuery:
IF HExecuteSQLQuery(MyProcedure, "MyConnection", ...
hQueryWithoutCorrection, "set @res=user.MyProc(@p1,@p2)") THEN
Trace("res=" + MyProcedure.res)
Trace("p1=" + MyProcedure.p1)
Trace("p2=" + MyProcedure.p2)
ELSE
Error(HErrorInfo())
END
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: 20/07/2022

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