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 20-07-2011
andresenlared andresenlared is offline
Miembro
 
Registrado: oct 2003
Posts: 153
Poder: 21
andresenlared Va por buen camino
Talking Retorno de datos procedimiento almacenado

Saludos.

Estoy migrando un procedimiento almacenado firebird a SQL server, pero no tengo claro la parte del retorno de info que puede dar un procedimiento SQL.
En firebir puedo manejar un procedimiento en un select y me da los datos que tenga en return. Como puedo hacer esto mismo en SQL server??
__________________
Popayán-Colombia
Responder Con Cita
  #2  
Antiguo 20-07-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
MS-SQL devuelve los datasets simplemente con un Select * From xxx, si requieres parámetros de salida, los defines como OUT, @Salida INT y le asiganas valor así: SET @Salida = 1;
eso es todo =)
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #3  
Antiguo 21-07-2011
andresenlared andresenlared is offline
Miembro
 
Registrado: oct 2003
Posts: 153
Poder: 21
andresenlared Va por buen camino
Muchas gracias por tu ayuda, ahora ya atengo el cuerpo del procedimiento almacenado pero al ejecutarlo marca error para las lineas donde esta declare y otros errores mas abajo. Entendi que para usar variables internas al procedimientio van despues del AS, y las de entrada y retorno van despues de create procedure. Coloco a continuacion el codigo que tengo...porque no he podido solucionar este problemilla. Gracias.

Código SQL [-]
-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters 
-- command (Ctrl-Shift-M) to fill in the parameter 
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
--SET ANSI_NULLS ON
--GO
--SET QUOTED_IDENTIFIER ON
--GO
-- =============================================
-- Author:    
-- Create date: <Create Date,,>
-- Description:  
-- =============================================
CREATE PROCEDURE GENERAR_FOLIO
  -- Add the parameters for the stored procedure here
  --<@Param1, sysname, @p1> int> = , 
  --<@Param2, sysname, @p2> int> = 
    @ID_UMAE INT, 
    @ID_PACIENTE INT, 
    @FOLIO CHAR(13) OUTPUT, 
    @DES_UMAE CHAR(50) OUTPUT, 
    @CVE_PRESUPUESTAL CHAR(13) OUTPUT
    
AS
   declare @CONSECUTIVO int,
   declare @NEWCONSECUTIVO int,
   declare @LARGO int,
   declare @DIFERENCIA int,
   declare @COMPLETAR char(5),
   declare @COD_UMAE int,
   declare @ANIO char(4),
   declare @DIGIANIO CHAR(2)
  
BEGIN

  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;
    -- Insert statements for procedure here
  --SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
   SELECT SET @CONSECUTIVO=tbl_usrporumae.consecutivo FROM tbl_usrporumae
   WHERE tbl_usrporumae.id_umae=@ID_UMAE
   
   SET @ANIO=substring(convert(char(8), getdate(),112),1,4)
   SET @DIGIANIO=substring(@ANIO,3,4)
   
   SET @NEWCONSECUTIVO=@CONSECUTIVO+1;
   SET @LARGO=5;

   SET @DIFERENCIA=@LARGO-LEN(STR(@NEWCONSECUTIVO,10);
   SET @COMPLETAR=''

   if (@DIFERENCIA=4) 
      SET @COMPLETAR='0000'

   If (@DIFERENCIA=3) 
      SET @COMPLETAR='000'

   if (@DIFERENCIA=2) 
      SET @COMPLETAR='00'

   if (@DIFERENCIA=1) 
      SET @COMPLETAR='0'

   set @FOLIO=@COD_UMAE+'-'+@DIGIANIO+'-'+@COMPLETAR+str(NEWCONSECUTIVO,10));

   UPDATE tbl_usrporumae SET tbl_usrporumae.consecutivo=@NEWCONSECUTIVO
   WHERE tbl_usrporumae.id_umae=@ID_UMAE;
   
   
   UPDATE tblpaciente SET tblpaciente.imp_e='T', 
   tblpaciente.id_umae=@ID_UMAE, TBLPACIENTE.fecha_impresione=getdate() where tblpaciente.id=@id_paciente;

END
GO
__________________
Popayán-Colombia
Responder Con Cita
  #4  
Antiguo 21-07-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Código SQL [-]
-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters 
-- command (Ctrl-Shift-M) to fill in the parameter 
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
--SET ANSI_NULLS ON
--GO
--SET QUOTED_IDENTIFIER ON
--GO
-- =============================================
-- Author:    
-- Create date: <Create Date,,>
-- Description:  
-- =============================================
CREATE PROCEDURE GENERAR_FOLIO
  -- Add the parameters for the stored procedure here
  --<@Param1, sysname, @p1> int> = , 
  --<@Param2, sysname, @p2> int> = 
    @ID_UMAE INT, 
    @ID_PACIENTE INT, 
    @FOLIO CHAR(13) OUTPUT, 
    @DES_UMAE CHAR(50) OUTPUT, 
    @CVE_PRESUPUESTAL CHAR(13) OUTPUT
AS  
BEGIN
   declare @CONSECUTIVO int
   declare @NEWCONSECUTIVO int
   declare @LARGO int
   declare @DIFERENCIA int
   declare @COMPLETAR char(5)
   declare @COD_UMAE int
   declare @ANIO char(4)
   declare @DIGIANIO CHAR(2)

  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;
    -- Insert statements for procedure here
  --SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
   SELECT SET @CONSECUTIVO=tbl_usrporumae.consecutivo FROM tbl_usrporumae
   WHERE tbl_usrporumae.id_umae=@ID_UMAE
   
   SET @ANIO=substring(convert(char(8), getdate(),112),1,4)
   SET @DIGIANIO=substring(@ANIO,3,4)
   
   SET @NEWCONSECUTIVO=@CONSECUTIVO+1;
   SET @LARGO=5;

   SET @DIFERENCIA=@LARGO-LEN(STR(@NEWCONSECUTIVO,10);
   SET @COMPLETAR=''

   if (@DIFERENCIA=4) 
      SET @COMPLETAR='0000'

   If (@DIFERENCIA=3) 
      SET @COMPLETAR='000'

   if (@DIFERENCIA=2) 
      SET @COMPLETAR='00'

   if (@DIFERENCIA=1) 
      SET @COMPLETAR='0'

   set @FOLIO=@COD_UMAE+'-'+@DIGIANIO+'-'+@COMPLETAR+str(NEWCONSECUTIVO,10));

   UPDATE tbl_usrporumae SET tbl_usrporumae.consecutivo=@NEWCONSECUTIVO
   WHERE tbl_usrporumae.id_umae=@ID_UMAE;
   
   
   UPDATE tblpaciente SET tblpaciente.imp_e='T', 
   tblpaciente.id_umae=@ID_UMAE, TBLPACIENTE.fecha_impresione=getdate() where tblpaciente.id=@id_paciente;

END
Así debería funcionar.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #5  
Antiguo 24-07-2011
andresenlared andresenlared is offline
Miembro
 
Registrado: oct 2003
Posts: 153
Poder: 21
andresenlared Va por buen camino
Exclamation

Saludos.

Sigo con el cuento del procedimiento almacenado...ya esta en base de datos tiene dos parametros de entrada y retorna 3 datos.

Mi pregunta va en que componente de los ADO debo usar y como usarlo, porque uso los parametros de salida para un reporte en PDF.

uso el AdoStoredproc cuando el procedimiento no retorna nada y lo hago de la siguiente manera.

Código Delphi [-]
Adostoresproc.ExecProc
;

y funciona bien.

pero para el procedimiento que me retorna datos, no se como usar el componente, si me sirve ese mismo, o se trabaja con un ADOquery o ADOdataset, como creo la sentancia. Ya he probado varias cosas me me salen errores.

__________________
Popayán-Colombia
Responder Con Cita
  #6  
Antiguo 24-07-2011
andresenlared andresenlared is offline
Miembro
 
Registrado: oct 2003
Posts: 153
Poder: 21
andresenlared Va por buen camino
Saludos.

Ya logre ejecutar el procedimiento desde un objeto Adoquery, es muy diferente a como se maneja en firebird. Para este caso uso el mismo procedimiento que esta en este hilo y para obtener los parametros de salida se hace lo siguiente.

Código SQL [-]
DECLARE @RC int
DECLARE @ID_UMAE int
DECLARE @ID_PACIENTE int
DECLARE @FOLIO varchar(13)
DECLARE @DES_UMAE varchar(50)
DECLARE @CVE_PRESUPUESTAL varchar(13)

-- TODO: Establezca los valores de los parámetros aquí.

EXECUTE @RC = [IMSS].[dbo].[GENERAR_FOLIO] 
   10
  ,1
  ,@FOLIO OUTPUT
  ,@DES_UMAE OUTPUT
  ,@CVE_PRESUPUESTAL OUTPUT

select "FOLIO"=@FOLIO, "DES_UMAE"=@DES_UMAE, "CVE_PRESUPUESTAL"=@CVE_PRESUPUESTAL

con este codigo en la propiedad SQL del Adoquery, ya se consigue obtener los parametros de salida.

Adoquery.open.

Lito..
__________________
Popayán-Colombia
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
como acceso a los datos que devuelve un procedimiento almacenado? r1d2m3 MS SQL Server 1 26-10-2010 21:49:01
Procedimiento almacenado que pueda consultar una base de datos diferente. fredycc Firebird e Interbase 3 15-04-2009 21:17:06
Como obtengo los datos con un procedimiento almacenado David Conexión con bases de datos 4 21-05-2007 12:05:27
Acceder otra base de datos en Procedimiento Almacenado Firebird mario_2000 Conexión con bases de datos 2 05-09-2006 16:35:27
Ejectutar Procedimiento Almacenado en otra Base de Datos AGAG4 Conexión con bases de datos 2 20-09-2004 20:12:44


La franja horaria es GMT +2. Ahora son las 04:51:32.


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