Ir al contenido


Foto

concatenar parametro stored procedure


  • Por favor identifícate para responder
2 respuestas en este tema

#1 abraham85

abraham85

    Advanced Member

  • Miembros
  • PipPipPip
  • 128 mensajes

Escrito 13 marzo 2011 - 10:58

Hola muchachos  (h) (h)
les quiero pedir su ayuda..
estube leyendo y gracias a ustedes aprendi q es mejor tener las consultas en Stored Procedures,
entonces quiero pasar algunas consultas y agruparlas en un SP.
El tema es que en codigo delphi tengo muchas consultas SQL concatenadas...algo asi como :




delphi
  1. AQTemp.SQL.Text := 'update imputacion.dbo.'+tablaactual+' set imputacion.dbo.'+tablaactual+'.actual =  '+
  2.                       ' (select precios.prenormalizado  from precios inner join marca on marca.idmarca=precios.idmarca '+
  3.                       ' where marca.frecuencia='+QuotedStr(frecu)+' and precios.idneg=imputacion.dbo.'+tablaactual+'.idnegocio '+
  4.                       ' and precios.idmarca=imputacion.dbo.'+tablaactual+'.idmarca '+
  5.                       ' and periodo='+inttostr(periodo)+' and mes='+inttostr(mesjob)+' and anio= '+inttostr(aniojob)+')';
  6.   AQTemp.ExecSQL;


en dond la variable "TABLAACTUAL" va cambiando de valor segun el usuario cambie de parametros para la busqueda.
entonces quise poner esta consulta en un stored procedure y no me andubo.
El tema esta con la variable de @tablaactual dentro del SP.  :( :( :(
Con las demas variables no hay drama  :| :|


update imputacion.dbo.@tablaactual set imputacion.dbo.@tablaactual.actual =  
(select precios.prenormalizado  from precios inner join marca on marca.idmarca=precios.idmarca
where marca.frecuencia=@frecu and precios.idneg=imputacion.dbo.@tablaactual.idnegocio
and precios.idmarca=imputacion.dbo.@tablaactual.idmarca
and periodo=@perido and mes=@mes and anio=@anio)



me tira el error "Mens. 102, Nivel 15, Estado 1, Línea 1 Sintaxis incorrecta cerca de '@tablaactual'."


estube investigando y creo que una de las soluciones que vi por ahi...es armar toda la consulta como un string y listo
algo asi como lo tengo en Delphi  :s :s :s


Spero me puedan ayudar. Saludos!
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 14 marzo 2011 - 06:27

Saludos.

Para realizar lo que andas buscando es necesario, como bien indicas, armarla osea concatenar la sentencia.  Hasta donde tengo entendido, ningún motor de BD te soporta poner un parámetro para reemplazar el nombre de una tabla.

Desde el mismo motor puedes concatenar la sentencia, no necesariamente desde Delphi; lo que pierdes realizándolo de esta manera es velocidad además de estar expuesto a errores de sintaxis porque el motor no "sabe" que tienes puesto en la variable que almacena el String.
  • 0

#3 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 14 marzo 2011 - 08:13

Que tal abraham85, tu detalle me ha recordado un par de stored procedures para firebird que generan un xml a partir de una sentencia SQL que pasas como string, y en esta parte del sp esta creo lo que buscas, y donde hasta creo posible al menos en firebird si se puede, pero dado a como nombras las variables creo que lo que usas es ms sql server.

Al menos en el motor de bd de microsoft no he hecho algo similar porque al menos generar xml es relativamente fácil, pero si lo solucionas te agradecería postearas tu solución.

El enlace del SP es: http://fernandomedei...edure-firebird/

[firebird]
  /* extract only table name for "all fields" and */
  /* open/close tags in xml */
  table_name = substring(sql_right from 1
                for position(' ',sql_right)-1);
[/firebird]

Aquí usa otra variable donde contiene parte del sql que utiliza despues del from.
[firebird]
  /* record count... */
  execute statement
    cast('select count(*) from ' || :sql_right as varchar(1024))
    into :records;
[/firebird]
  • 0




IP.Board spam blocked by CleanTalk.