FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Gracias fjcg02 por tu aporte para entender porque no tomaba la variable en el execute. Lo que me aconsejas fue lo primero que hice y funciona perfecto cuando pongo un nombre de tabla, entonces como necesito hacerlo para varias tablas, cambié el nombre de tabla por la variable "@BASE y me llevé la sorpresa que al guardar el procedimiento aparece "Debe declarar la variable de tabla "@BASE"", la cual está declarada. Por eso intenté con el execute, pero tampoco funciona.
|
#2
|
||||
|
||||
Hola,
puedes hacer otra cosa. Lo que te propone aromigaret está bien, pero te pasará lo mismo por el ámbito de las variables, aparte de que sería SET @COMANDO = 'INSERT INTO '+@TEMP1 + ' SELECT ' + ' SUM(SUBTIVA105), ' + ' SUM(SUBTIVA21) , ' + ' SUM(SUBTOTSIVA), ' + ' SUM(GANASIVA) , ' + ' SUM(GANACIVA) ' + ' from ' + @BASE; Puedes declarar en vez de una variable de tipo tabla @TEMP1 una tabla que te haga el trabajo. Para ello deberás hacer algo así CREATE TABLE #TEMP1 (SUBTIVA105 NUMERIC(11,2),SUBTIVA21 NUMERIC(11,2),SUBTOTSIVA NUMERIC(11,2),GANASIVA NUMERIC(11,2),GANACIVA NUMERIC(11,2)) para crearla, luego usarla haciendo los insert y finalmente borrarla. DROP TABLE #TEMP1 Estas tablas sólo las ve no estoy seguro si la sesión activa o el usuario, pero no debes olvidar borrarla al final del proceso. Prueba a ver si consigues algo. Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#3
|
|||
|
|||
fjcg02, gracias nuevamente. Hay un detalle que no me queda claro, si utilizo una tabla temporal, como me lo propones, y mas de un usuario utiliza este procedimiento, no daría error, pues todos crearían la misma tabla auxiliar?. Para que comprendas, este procedimiento suma distintas columnas de una tabla que se crea temporalmente. En ella se cargan pedidos para realizar una factura. Como a veces son muchos ítems, si lo hacia dentro del programa tardaba considerablemente, al hacerlo por procedimiento almacenados y probarlo con una tabla temporal especifica, funcionaba perfecto, lo quise "generalizar" para realizar la carga de pedidos desde varias terminales y allí es donde no logro hacerlo funcionar.
Última edición por aromigaret fecha: 30-09-2015 a las 18:17:46. |
#4
|
||||
|
||||
Tengo entendido que las tablas temporales se crean en el ámbito de la sesión del usuario. Es decir, una tabla creada por un usuario en una sesión no puede ser utilizada por incluso el mismo usuario en otra sesión.
De hecho, si cierras la sesión del usuario sin borrar la tabla, y la vuelves a abrir, la tabla ya no existe. Ahora bien, si no la borras , y en la misma sesión vuelves a crearla, el motor te levantará una excepción. Hay documentación en la red que lo explica bastante mejor que yo. En le trabajo tengo un montón de consultas de extracción de información que ejecuto con el mismo usuario, obviamente en distintas sesiones, y no me ha cascado nunca por este motivo. También he de confesarte que cambié las tablas temporales por variables de tipo tabla, que para tablas de "pocos" registros me resultan más prácticas y son más rápidas. Cuando he utilizado tablas, me ha cascado cuando la sql casca por algún error de sintaxis, valor en alguna variable, etc y no pasa por la instrucción de borrado de la tabla. Espero haberte ayudado. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#5
|
|||
|
|||
No hay caso fjcg02...
si lo hago asi :
siendo @base=varchar(9) (donde paso como parametro el nombre de la base), el error es ' Debe declarar la variable de tabla "@BASE" '. si lo hago asi....
el error es " El nombre de columna '#TEMP1' no es válido" para #TEMP1 y si pongo @TEMP1 el error es ' Debe declarar la variable escalar "@TEMP1" ' No se por donde encaralo.. |
#6
|
||||
|
||||
Hola,
no tengo posibilidad de probar, ya que no administro ninguna bbdd de SQL Server. Lo que sí te puedo asegurar es que se pueden hacer queries bastante complejas que devuelvan lo que quieras. Por todo lo dicho te recomiendo que hagas un consulta que haga lo siguiente: Esto funciona. Devuelve filas y columnas. Adapta tus consultas, tus campos, ... y nos dices qué resultado te da. Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#7
|
|||
|
|||
Genioooooo!!!!! Funcionó !!!!
Fjcg02, no tengo palabras para agradecerte, muchas gracias por tu tiempo y dedicacion. Aqui dejo el proceso por si alguien necesita algo parecido.
Merito total a Fjcg02 |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
pasar nombre de tabla como parametro a procedimiento almacenado | Matorral | MySQL | 0 | 17-12-2013 16:53:14 |
Crear Formulario pasando como parametro un string | Efren2006 | OOP | 2 | 15-05-2008 18:08:48 |
Parametro nulo en un procedimiento almacenado | Viky | SQL | 3 | 29-03-2007 22:45:22 |
Ejectutar Procedimiento Almacenado en otra Base de Datos | AGAG4 | Conexión con bases de datos | 2 | 20-09-2004 20:12:44 |
Crear Formulario pasando como parametro un string | morfeo21 | Varios | 1 | 18-08-2004 02:39:58 |
|