Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-09-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Procedimiento almacenado pasando como parametro el nombre de la base

Hola, estoy intentando realizar la suma de varios campos con procedimientos almacenados en sql server 2008. El inconveniente radica en que no hayo la forma de hacerlo al pasarle a dicho procedimiento como parametro la base sobre la cual tiene que realizar las suma. Les paso lo realizado:

ALTER PROCEDURE [dbo].[TOTALES]
-- Add the parameters for the stored procedure here

@TOTIVA21 NUMERIC(13,2) OUTPUT,
@TOTIVA105 NUMERIC(13,2) OUTPUT,
@SUBTsIVA NUMERIC(13,2) OUTPUT,
@GANANCIAsIVA NUMERIC(13,2) OUTPUT,
@GANANCIAcIVA NUMERIC(13,2) OUTPUT,
@BASE NVARCHAR(9)

AS
BEGIN

DECLARE @COMANDO NVARCHAR(240)
SET NOCOUNT ON;

SET @COMANDO='SELECT (@TOTIVA105)= SUM(SUBTIVA105) FROM ' + @BASE
EXEC SP_EXECUTESQL @COMANDO

SET @COMANDO= 'SELECT @TOTIVA21=SUM(SUBTIVA21) FROM ' + @BASE
EXEC SP_EXECUTESQL @COMANDO

SET @COMANDO= 'SELECT @SUBTsIVA=SUM(SUBTOTSIVA) FROM ' + @BASE
EXEC SP_EXECUTESQL @COMANDO

SET @COMANDO= 'SELECT @GANANCIAsIVA=SUM(GANASIVA) FROM ' + @BASE
EXEC SP_EXECUTESQL @COMANDO

SET @COMANDO= 'SELECT @GANANCIAcIVA=SUM(GANACIVA) FROM ' + @BASE
EXEC SP_EXECUTESQL @COMANDO

END

Agradezco de antemano quien pueda ayudarme
Responder Con Cita
  #2  
Antiguo 29-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:

Responder Con Cita
  #3  
Antiguo 29-09-2015
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
Quizas esto funcione, no lo he probado:

Código SQL [-]
ALTER PROCEDURE [dbo].[TOTALES]
-- Add the parameters for the stored procedure here

@TOTIVA21 NUMERIC(13,2) OUTPUT,
@TOTIVA105 NUMERIC(13,2) OUTPUT,
@SUBTsIVA NUMERIC(13,2) OUTPUT,
@GANANCIAsIVA NUMERIC(13,2) OUTPUT,
@GANANCIAcIVA NUMERIC(13,2) OUTPUT,
@BASE NVARCHAR(9)

AS
BEGIN

  DECLARE @COMANDO NVARCHAR(1000) 
  SET NOCOUNT ON;


  set @COMANDO = 
    'select ' + 
    '  SUM(SUBTIVA105) as SUBTIVA105 , ' + 
    '  SUM(SUBTIVA21)  as SUBTIVA21 , ' + 
    '  SUM(SUBTOTSIVA) as SUBTOTSIVA, ' + 
    '  SUM(GANASIVA) as GANASIVA, ' + 
    ' SUM(GANACIVA)  as GANACIVA ' +
    ' into #tempo1 ' +
    ' from ' + @BASE;

  EXEC SP_EXECUTESQL @COMANDO;

  select top 1
    @TOTIVA105 = SUBTIVA105, 
    @TOTIVA21 = TOTIVA21, 
    @SUBTsIVA = SUBTOTSIVA, 
    @GANANCIAsIVA = GANASIVA, 
    @GANANCIAcIVA = GANACIVA
  from #tempo1;

END
Responder Con Cita
  #4  
Antiguo 30-09-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Estimado orodriguezca, gracias por tu tiempo. Probe lo que me enviaste y obtengo al llamarlo desde delphi "el nombre de objeto #tempo1 no es valido'. Lo he modificado de varias maneras y simepre da ese error. Tomando tu ejemplo lo hice con variable de tabla

Código SQL [-]
ALTER PROCEDURE [dbo].[TOTALES]
    -- Add the parameters for the stored procedure here
    
    @TOTIVA21 NUMERIC(13,2) OUTPUT,
    @TOTIVA105 NUMERIC(13,2) OUTPUT,
    @SUBTsIVA NUMERIC(13,2) OUTPUT,
    @GANANCIAsIVA NUMERIC(13,2) OUTPUT,
    @GANANCIAcIVA NUMERIC(13,2) OUTPUT,
    @BASE NVARCHAR(9)
    
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
  DECLARE @COMANDO NVARCHAR(1000)   
  DECLARE @TEMP1 TABLE(SUBTIVA105 NUMERIC(11,2),SUBTIVA21 NUMERIC(11,2),SUBTOTSIVA NUMERIC(11,2),GANASIVA NUMERIC(11,2),GANACIVA NUMERIC(11,2))
  
  SET NOCOUNT ON;  
  
  SET @COMANDO = 
    'INSERT INTO @TEMP1' + 
    ' SELECT ' + 
    ' SUM(SUBTIVA105), ' + 
    ' SUM(SUBTIVA21) , ' + 
    ' SUM(SUBTOTSIVA), ' + 
    ' SUM(GANASIVA) , ' + 
    ' SUM(GANACIVA) ' +    
    ' from ' + @BASE;

  EXEC SP_EXECUTESQL @COMANDO;

  select top 1
    @TOTIVA105 = SUBTIVA105, 
    @TOTIVA21 = SUBTIVA21, 
    @SUBTsIVA = SUBTOTSIVA, 
    @GANANCIAsIVA = GANASIVA, 
    @GANANCIAcIVA = GANACIVA
  from @temp1;


pero me da error cuando se ejecuta el @comando "debe declarar la varible de tabla @temp1". Es como si no reconociera las variables que estan dentro del @comando
Responder Con Cita
  #5  
Antiguo 30-09-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,
El problema es de alcance de las variables. Cuando se ejecutan en el XEC SP_EXECUTESQL, no existen en su ámbito ( ya que el SQL Server seguramente creará uno nuevo) . Creo que eso es lo que está ocurriendo.

Prueba a hacer:

SELECT @TOTIVA105= SUM(SUBTIVA105) FROM @BASE

a ver si te deja el valor en la variable @TOTIVA105.
No estoy seguro de que funcione.

Otra cosa que me llama la atención es ( no estoy seguro) si las variables de entrada pueden ser cambiadas. Si no se pudiera, tendrás que definir otras.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #6  
Antiguo 30-09-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 03:31:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi