Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

un trigger que ejecute un store procedure??

Estas en el tema de un trigger que ejecute un store procedure?? en el foro de SQL Server en Foros del Web. Hola a todos!!!...necesito su ayuda...requiero generar un trigger el cual haga que se ejecute un store procedure cada vez que ingrese un dato a mi ...
  #1 (permalink)  
Antiguo 15/02/2007, 09:47
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 7 meses
Puntos: 0
Pregunta un trigger que ejecute un store procedure??

Hola a todos!!!...necesito su ayuda...requiero generar un trigger el cual haga que se ejecute un store procedure cada vez que ingrese un dato a mi tabla...alguien podria qyudarme...no conozco la sintaxis del trigger...agradezco de antemano la ayuda!!!!

Mi tabla se llama BAL, y tiene solo 4 campos, el ID, CODE, TYPE y la FECHA (esta se pone de manera automatica cada vez q ingresa un dato a mi tabla con un getdate), y el store procedure se llama spa_bal_dato
  #2 (permalink)  
Antiguo 15/02/2007, 15:41
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: un trigger que ejecute un store procedure??

Necesitas algo como esto:

CREATE TRIGGER nombretrigger ON tabla
FOR INSERT
AS
SELECT * FROM Inserted --es una tabla virtual con lo que acabas de insertar

El objetivo es leer los datos de Inserted y hacer algo con ellos, en tu caso seguramente tomar los datos y mandarlos como parámetros al SP.

Lo aburrido de esto es que el SP no recibe una tabla como parámetro, sino valores puntuales. Entonces lo que te recomendaría es en lugar de ejecutar el SP buscar la manera de tener el código dentro del trigger para poder trabajar a nivel de tablas enteras.

Si insistes en usar el SP entonces tienes que 1) recorrer todos los registros de la tabla inserted para llamar al SP o 2) emular arrays para enviar al SP, aunque implica modificarlo.

PD. Probablemente alguien salga con un único "select @variable = campo from inserted", pero eso no es una solución robusta pues supone un solo registro.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 15/02/2007, 19:14
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: un trigger que ejecute un store procedure??

Mithrandir!!!...agradezco tus comentarios...mira la verdad es que a causa de otro procedimiento que voy a realizar con el SP necesito tenerlos por separado...el SP que tengo es el siguiente:

Código:
create procedure dbo.spa_bal_dato
     @CODEOUT CHAR(10) OUTPUT,
     @TYPEOUT CHAR(10) OUTPUT
as
SELECT TOP 1 
       @CODEOUT = CODE
      ,@TYPEOUT = TYPE
FROM   dbo.BALANCEADORAS
WHERE  (CODE > '0') 
ORDER BY 
       ID DESC

GO
Y así lo ejecuto:

Código:
-- Ejecución del stored procedure

Declare  @CODEOUT_L VARCHAR(20),
         @TYPEOUT_L VARCHAR(20)

Execute dbo.spa_bdr_dato @CODEOUT_L OUTPUT, @TYPEOUT_L OUTPUT

Como habras observado, el SP me devuelve el ultimo dato que ingresó en mi tabla y lo guarda en unas variables, las cuales envio a otro proceso, pero necesito que cada vez que ingrese un dato nuevo en mi tabla se ejecute el store procedure, asi podre ver siempre y de manera automática el último dato que ingresa en mi tabla...es por ello que necesito generar el trigger, la cuestion es que no sé como generar un trigger que haga que se ejecute mi SP......Hasta donde tengo entendido si yo ingreso un nuevo dato a mi tabla y quiero verlo, necesito ejecutar el SP, y como van a estar ingresando datos cada 5 segundos aproximadamente, es por ello que necesito generar el trigger que te comento.
  #4 (permalink)  
Antiguo 16/02/2007, 11:07
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: un trigger que ejecute un store procedure??

Suponiendo que el campo ID es identity (autonumérico) entonces creo que vas por el camino empedrado.

Tienes funciones para regresar el último valor del identity.

Prueba con cosas como:

INSERT INTO tabla a, b VALUES ('a', 'b')
SELECT SCOPE_IDENTITY() --el valor que buscas
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 16/02/2007, 11:31
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: un trigger que ejecute un store procedure??

Hola Mithrandir!!!...bueno en realidad la idea es regresar el último valor del campo de CODE y TYPE que fueron ingresados, te había comentado que tengo 4 campos, ID(autonmérico), CODE, TYPE y FECHA(getdate), por lo tanto lo mas conveniente sería dejar que en el SP filtre por la fecha:

Código:
create procedure dbo.spa_bal_dato
     @CODEOUT CHAR(10) OUTPUT,
     @TYPEOUT CHAR(10) OUTPUT
as
SELECT TOP 1 
       @CODEOUT = CODE
      ,@TYPEOUT = TYPE
FROM   dbo.BALANCEADORAS
WHERE  (CODE > '0') 
ORDER BY 
       FECHA DESC

GO
Aunque mi duda continua, como hago que mi SP se ejecute (de forma automática) cada vez que ingrese una nueva fila de datos (CODE y type)??...se ingresará un dato de codigo y tipo (fila) entonces requiero que se ejecute mi SP cada vez que esto suceda...???
  #6 (permalink)  
Antiguo 16/02/2007, 12:47
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: un trigger que ejecute un store procedure??

Se me ocurre algo como:

SELECT *
INTO #temp
FROM Inserted

DECLARE @code Char(10), @Type Char(10)

WHILE EXISTS(SELECT * FROM #temp)
BEGIN
SELECT TOP 1 @code = code, @type = type FROM #temp
EXEC dbo.spa_bal_dato @code, @type
DELETE #temp WHERE code = @code AND type = @type
END

DROP TABLE #temp

Solo ajusta la parte del delete para asegurar que filtras sobre el campo llave.

PD. Código al vuelo, puede tener errores.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #7 (permalink)  
Antiguo 16/02/2007, 16:27
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 7 meses
Puntos: 0
Pregunta Re: un trigger que ejecute un store procedure??

Realicé el select que me sugeriste, cambié algunas cosas y me quedó de la siguiente forma:

Código:
SELECT * 
INTO BAL
FROM BAL

DECLARE 
	@CODE VARCHAR(20), 
	@TYPE VARCHAR(20)

WHILE EXISTS(SELECT * FROM #temp)
BEGIN
SELECT TOP 1 @code = code, @type = type FROM #temp
EXEC dbo.spa_bal_dato @code, @type
DELETE #temp WHERE code = @code AND type = @type
END
Aunque no estoy muy segura de lo que hace, lo hice en el analyzer query y al ejecutarlo me borró mi SP...

Creo que mas bien lo que necesito es crear un trigger que ejecute mi SP en el momento en que se haya insertado una nueva fila de datos (que lleguen datos nuevos a los 4 campos de la tabla), busqué un poco y relicé lo siguiente:

Código:
CREATE TRIGGER updBalData
ON BALANCEADORAS
FOR INSERT 
AS

Declare  @CODEOUT_L VARCHAR(20),
         @TYPEOUT_L VARCHAR(20)

Execute dbo.spa_bdr_dato @CODEOUT_L OUTPUT, @TYPEOUT_L OUTPUT

Print ' Valor de @CODEOUT_L ' + @CODEOUT_L 
Print ' Valor de @TYPEOUT_L ' + @TYPEOUT_L
GO
pero no sé si este bien, además como saber si un trigger funciona?...por otro lado creé el trigger, pero en donde se almacena?...y si no es lo que necesito, como borrarlo?...y asi como en el SP hay una sintaxis que al crearlo si ya existe borra el existente, para realizar el trigger tambien?...
  #8 (permalink)  
Antiguo 20/02/2007, 15:17
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: un trigger que ejecute un store procedure??

Tu primer código tiene errores, porque mezclas la tabla BAL con la #temp que yo utilizé (Usar # indica que es una tabla temporal, es mejor idea).

SELECT *
INTO BAL
FROM BAL

Esta sentencia no tiene sentido, marcará que la tabla ya existe. Por otro lado, no veo la referencia a Inserted, que es lo que hace trigger a un trigger.


En tu segundo código veo que no haces nada con las variables, simplemente las declaras y las mandas al SP.

Espero eso te ayude a aclarar tus dudas.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:32.