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

como simular TRIGER Select

Estas en el tema de como simular TRIGER Select en el foro de SQL Server en Foros del Web. Tengo la siguiente duda, como puedo hacer para simular un trigger cuando se selecciona una tabla debido a que los trigger solo existen para DELETE ...
  #1 (permalink)  
Antiguo 13/04/2009, 20:03
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años, 1 mes
Puntos: 0
como simular TRIGER Select

Tengo la siguiente duda, como puedo hacer para simular un trigger cuando se selecciona una tabla debido a que los trigger solo existen para DELETE , INSERT y UPDATE y necesito hacerlo para cuando alguien seleccione una tabla lo reedireccione a otra, esto es por que en la aplicacion existe en miles de partes la consulta hacia esa tabla, se los agradeceria muchisimo, saludos.
  #2 (permalink)  
Antiguo 13/04/2009, 20:05
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: como simular TRIGER Select

No entendi, ¿quieres guardar el SELECT (resultado) en otra tabla?
  #3 (permalink)  
Antiguo 13/04/2009, 20:13
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: como simular TRIGER Select

no lo que pasa es que no existe un trigger para cuando alguien selecciona una tabla , lo que quiero es lo siguiente, existe una tabla PERSONAS que cuando alguien haga select * from PERSONAS , REDIRIGIR A ESE USUARIO A OTRAS TABLAS PERSONAS2 , PERSONAS3 , ETC teniendo un propio criterio.

esto es simulando que cuando alguien inserta a una tabla es asi:

CREATE TRIGGER nombre_trigger ON tabla AFTER UPDATE
AS
SET NOCOUNT ON

validas lo que tengas que validar


SET NOCOUNT OFF



GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO



------------------------------------

yo lo que quiero es algo que simule esto, yo se que esto no puede ser hecho por medio de trigger pero debe haber una manera de simular esto:

CREATE TRIGGER nombre_trigger ON tabla AFTER SELECT
AS
SET NOCOUNT ON

validas lo que tengas que validar


SET NOCOUNT OFF

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
  #4 (permalink)  
Antiguo 14/04/2009, 21:02
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: como simular TRIGER Select

No, pues no existe nada parecido a lo que deseas hacer, si alguien mas tuviera alguna idea, que sea bienvenida.
  #5 (permalink)  
Antiguo 15/04/2009, 00:24
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 7 meses
Puntos: 85
Respuesta: como simular TRIGER Select

A partir de SQL Server 2005 existen los sinónimos.

Código:
CREATE SYNONYM Personas FOR Personas2
Go
SELECT * FROM Personas
Go
Lo que no recuerdo ahora es si una tabla y un sinónimo comparten el mismo namespace, es decir, si pueden haber dos con el mismo nombre, si este no es el caso, tendrás que renombrar la tabla personas.

Saludos
  #6 (permalink)  
Antiguo 15/04/2009, 09:27
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: como simular TRIGER Select

Esta respuesta es buena y ya tengo conosimiento sobre esto, nada mas que mi problema radicaria en lo siguiente

tengo una tabla personas

pero esa tabla la deseo partir en 2

personas2008 y personas2009

cuando el sistema haga select * from personas where fecha = '2008-01-01'
este redireccione a personas2008

o bien
cuando el sistema haga select * from personas where fecha = '2009-01-01'
este redireccione a personas2009

no se si me di a entender osea los sinonimos si ayudan el problema es como tratar de validar lo que va adentro, por eso comentaba simular un trigger por que despues de una accion, se lleva la validacion y se termina con una respuesta, espero y me ayudes amigo de verdad no sabes cuanto necesito de esta ayuda, gracias.

Cita:
Iniciado por matanga Ver Mensaje
A partir de SQL Server 2005 existen los sinónimos.

Código:
CREATE SYNONYM Personas FOR Personas2
Go
SELECT * FROM Personas
Go
Lo que no recuerdo ahora es si una tabla y un sinónimo comparten el mismo namespace, es decir, si pueden haber dos con el mismo nombre, si este no es el caso, tendrás que renombrar la tabla personas.

Saludos
  #7 (permalink)  
Antiguo 15/04/2009, 09:34
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 7 meses
Puntos: 85
Respuesta: como simular TRIGER Select

Para resolver este problema existe el particionamiento de tablas e indices, más en particular, particionamiento por rangos, en este caso, rango de fechas.

http://msdn.microsoft.com/en-us/libr...6(SQL.90).aspx

Saludos
  #8 (permalink)  
Antiguo 15/04/2009, 09:59
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: como simular TRIGER Select

y si generas una funcion tipo tabla ?

como parametro le puedes enviar la fecha a filtrar y con el seleccionar en la tabla indicada...

la otra es hacer una vista, donde incluyas una union de tus tablas, si tienes los indices correspondientes no deberias tener problemas...asi se seleccionarian los registros de la tabla correspondiente al parametro del where...solo recuerda utilizar un union all en lugar de union, para que no trate de encontrar los registros distintos...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #9 (permalink)  
Antiguo 15/04/2009, 20:36
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: como simular TRIGER Select

Viendo la explicacion de nuestro amigo, no hay mas que decir que mas de una cabeza, piensa mejor.

No habia entendido el objetivo, pero ahora si creo que se han volado la barda.

Andres95, me has dejado boqui-abierto.

Saludos
  #10 (permalink)  
Antiguo 16/04/2009, 09:12
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: como simular TRIGER Select

mmmm pues no se si me entendieran, es como si quisiera simular base de datos distribuidas, como mi aplicacion es demasiado grando modificar eso desde codigo fuente es muy tedioso, pienso hac erlo desde sql, el problema es que andres no se si lo tuyo funcione cuando, se le de select a la tabla principal,

ejemplo:
cuando mi aplicacion selecciona la tabla principal, esta se redirige a la tabla correspondiente, que estas pueden ser n tablas, andres no se si eso que me digas pueda funcionar en este caso, me gustaria saber si puedes hacer un ejemplo simple para entender tu punto, les agradesco mucho yo se que esto es algo complejo pero asi aprendemos todos saludos.
  #11 (permalink)  
Antiguo 16/04/2009, 09:55
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: como simular TRIGER Select

claro, la idea es crear una sola vista particionada que pueda accederse en lugar de la enorme tabla original (la tabla original es reemplazada por la vista que contiene una union de las tablas divididas).

En la ayuda de sql server viene un ejemplo que agrego a continuacion, lo puedes buscar en el indice como "partitioned views":

El campo que utilizarias seria Fecha, en lugar del numero de cliente...

En este caso las tablas estan en servidores distintos, pero no hay problema, lo mismo aplica para tablas en la misma base de datos en el mismo server.

Código:
For example, you are partitioning a Customer table into three tables. The CHECK constraint for these tables is:

-- On Server1:
CREATE TABLE Customer_33
  (CustomerID   INTEGER PRIMARY KEY
                CHECK (CustomerID BETWEEN 1 AND 32999),
  ... -- Additional column definitions)

-- On Server2:
CREATE TABLE Customer_66
  (CustomerID   INTEGER PRIMARY KEY
                CHECK (CustomerID BETWEEN 33000 AND 65999),
  ... -- Additional column definitions)

-- On Server3:
CREATE TABLE Customer_99
  (CustomerID   INTEGER PRIMARY KEY
                CHECK (CustomerID BETWEEN 66000 AND 99999),
  ... -- Additional column definitions)

----------------- La vista centralizada seria : -----------------------

CREATE VIEW Customers AS
   SELECT * FROM CompanyDatabase.TableOwner.Customers_33
UNION ALL
   SELECT * FROM Server2.CompanyDatabase.TableOwner.Customers_66
UNION ALL
   SELECT * FROM Server3.CompanyDatabase.TableOwner.Customers_99
GO



y se accede directamente con:

SELECT * Customers WHERE CustomerID  = 2000

Espero te sea de utilidad,

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #12 (permalink)  
Antiguo 16/04/2009, 19:33
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: como simular TRIGER Select

Esa es la solucion y seria bueno (para todos nosotros, no es para nadie en particular), intentar hacer preguntas de una forma mas explicita, si se pudiera, hasta con ejemplos de lo que se desea obtener.

Saludos a todos (ahora estoy atacando el SQL Server 2008)
  #13 (permalink)  
Antiguo 17/04/2009, 12:03
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: como simular TRIGER Select

si eso si funciona y al 100 % pero en ese caso no me conviene desaserme de mi tabla de 49 millones de registros, mejor me quedo con la tabla, ya que las vistas alentarian mucho mas que seleccionar la tabla directamente, igual si funciona para otros remedios yo lo que queria es como una tipo redireccionacion sin tener que tomar todos los registros y hacer mejor la consulta, (no cabe decir que con indices, que ya los tengo) la tabla esta muy bien eficientada el problema es que hay como 8 tablas de ese tamaño todas que son muy usadas en miles de usuarios jeje gracias de todas maneras.
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 19:40.