SQL Server - EXECUTE SP_EXECUTESQL

 
Vista:
sin imagen de perfil

EXECUTE SP_EXECUTESQL

Publicado por Enrique (7 intervenciones) el 20/02/2008 19:39:13
buenas

Estoy creando una funciona definida por el usuario y me está dando el siguiente problema:

CREATE FUNCTION ...
...
begin
...
-- linea 67
EXECUTE SP_EXECUTESQL
@SQLInsert,
@SQL
...
end

Al ejecutar un select llamando a la funcion me da el siguiente error:
Servidor: mensaje 557, nivel 16, estado 2, procedimiento fTicket, línea 67
Desde una función sólo se puede ejecutar funciones y procedimientos almacenados extendidos.
¿Qué significa?, ¿No puedo usar el execute convariables locales dentro de una funcion?
Si es asi, ¿cómo puedo componer una sentencia SQL em tiempo de ejecucíón y que me devuelva las filas correspondientes?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:EXECUTE SP_EXECUTESQL

Publicado por Isaias (3308 intervenciones) el 20/02/2008 20:31:46
Enrique

Lo que NO PUEDES UTILIZAR son la ejecucion de STORE PROCEDURE en una funcion y sp_executesql, es un STORE PROCEDURE.

¿Cual es la necesidad de ejecutar este store dentro de una funcion?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:EXECUTE SP_EXECUTESQL

Publicado por Enrique (7 intervenciones) el 21/02/2008 12:55:05
Gracias por tu respuesta,

Tengo varias tablas dependiendo del año y según lo que el usuario pida en un intervalo de fecha debe leer de una o de varias tablas; al final, lo que se va haciendo es componer un SQL para que devuelva las filas de las n-tablas afectadas, de forma que se pueda evitar el estar escribiendo cada caso que puede surgir, pensé que sería mas sencillo que, según la petición, se fuese componiendo la sentencia select, y, para ejecutar un select que esté en una variable local se necesita el execute sp_executesql.

Claro que las tablas tienen el año en el nombre y con eso voy componiendo uno o n "select" según petición.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:EXECUTE SP_EXECUTESQL

Publicado por Isaias (3308 intervenciones) el 21/02/2008 18:53:29
¿Porque no JUNTAS tu informacion en una tabla historica y te quitas de problemas?

Ademas de pensar en un metodo de explotacion de informacion, mas profesional, como un cubo (OLAP) o algo por el estilo..........

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:EXECUTE SP_EXECUTESQL

Publicado por Enrique (7 intervenciones) el 21/02/2008 20:51:40
Al final he desistido y tal y como comentas, antes de leer tu respuesta ya lo había unido todo en una tabla. Son 30 millones de registros, en las líneas, y pocos menos en las cabeceras.

He cambiado los SQL y he añadido un indice, a sugenrecia del sql server, y las velocidades han aumentado bastante, de 2 min. a 0 s', vamos instantáneas.

Eso último que comentas (cubo - OLAP) me parece muy interesante, ya que hay una explotación de los datos y para todo no se puede meter índices, sería de locos, ¿por dónde podría empezar para leer y/o ver ejemplos?, Ya sé que en la ayuda estará, pero a veces, la misma cosa comentada de una forma más ligera se puede entender mejor.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:EXECUTE SP_EXECUTESQL

Publicado por Isaias (3308 intervenciones) el 22/02/2008 17:30:31
Enrique

OLAP, es todo un concepto, esto se traduce en algo muy sencillo, los datos, arreglados o vistos de formas diferentes (mineria de los datos), por ejemplo

Tu nos hablas de 30 millones de registros, la cuestion aqui seria, ¿Que tanto puedo acumular dichos registros?

Sin saber que tipo de datos tienes en esos 30 millones de registros, hablemos de VENTAS.

¿Acumuladas por?
- Division o Sucursal
- Vendedor
- Producto

- Anual, mensual, trimestral, diaria, por hora, por minuto
- Productos mas vendidos
- Productos menos vendidos
- Vendedores mas eficaces (top 10)

Etc.

Al final te daras cuenta que para hacer EXPLOTACION de informacion, no necesariamente deberas recorrer 30 millones de registros, claro esta, a menos que sea de un tipo AUDITORIA, ahi si ni que comentar.

Busca en la red, todo lo referente a ANALISYS SERVICES, CUBOS, OLAP, DATAMINING, etc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:EXECUTE SP_EXECUTESQL

Publicado por Enrique (7 intervenciones) el 22/02/2008 18:03:25
Muchas gracias por tu ayuda. Lo has clavado. Son tickets de venta y más-menos eso es lo que quiero explotar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:EXECUTE SP_EXECUTESQL

Publicado por Isaias (3308 intervenciones) el 22/02/2008 20:47:17
Bueno, pues manos a la obra, diseña tu base de explotacion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar