En el caso en que tengamos que obtener datos a partir de un stored procedure en lugar de poder atacar directamente a las tablas y vistas de la base de datos, tenemos dos opciones desde DataCycle Reporting:
- Llamada directa: es muy sencillo pero tiene dos importantes limitaciones al tener que desactivarse el parser
- No es posible seleccionar qué campos quiero cargar en la plantilla
- No se puede cambiar el orden de los campos que devuelve la consulta
- No se pueden incluir filtros en la tarea de insertar datos
- Utilizar OPENQUERY: no tiene las limitaciones anteriores, pero exige la creación de un Linked Server al propio servidor de base de datos.
Llamada directa a un Stored Procedure
1. Abrir una nueva consulta
2. Desactivar el parser
3. Seleccionar "Editar consulta", escribir en la parte SQL: exec [nombre del stored procedure] [par1],..,[parN]
4. Guardar la consulta ,si recibimos algun mensaje de no existe Select , aceptar y guardar igualmente
5. Cuando la utilicemos desde un proceso, observar que dado que no hay parser activado, no podemos seleccionar campos, ni cambiar el orden, ni incluir filtros.
Uso de OPENQUERY
Es necesario definir un linked server (servidor vinculado) contra la base de datos de la que vamos a obtener datos
1. Desde SQL Manager de SQL Server, añadir un NUEVO Servidor vinculado
2. Poner como nombre “LOCALHOST”, ya que no acepta el nombre del propio servidor
3. Agregar un inicio de sesión local, con los parámetros necesarios
4. Desde DataCycle Reporting, abrir nueva consulta > Editar consulta
5. Escribir la llamada utilizando la siguiente nomenclatura:
SELECT [campo1], [campo2], .., [campoN] FROM OPENQUERY([linked server],'exec [nombre del stored procedure] "[par1]","[par2], .., [parN]"')
Debemos escribir los campos manualmente en la sentencia SQL
6. Cuando la utilicemos desde un proceso, observar que ahora sí podemos tratarlo como una consulta normal, donde podemos seleccionar y ordenar campos, así como incluir filtros
0 Comentarios