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

Assertion en sql2

Estas en el tema de Assertion en sql2 en el foro de SQL Server en Foros del Web. Buenas necesito hacer una ASSERTION en SQL2 utilizando las siguiente tabla: Obras_subasta(Evento, obra, pujador) siendo clave primaria (Evento, Obra) Necesito hacer una ASSERTION en la ...
  #1 (permalink)  
Antiguo 25/05/2011, 16:10
 
Fecha de Ingreso: mayo-2011
Mensajes: 2
Antigüedad: 13 años
Puntos: 0
Información Assertion en sql2

Buenas necesito hacer una ASSERTION en SQL2 utilizando las siguiente tabla:
Obras_subasta(Evento, obra, pujador) siendo clave primaria (Evento, Obra)

Necesito hacer una ASSERTION en la cual me restrinja que : un pujador no puje por mas del 20% de las obras expuestas en un determinado evento.

Se que hay que hacer un contador con las obras que hay en cada evento, y que sea menor que otro contador que nos diga el numero de obras por la que ha pujado un pujador en un evento, multiplicado este ultimo contador por 0,2.


Se que es algo jodido y lioso, pero agradecería mucho que me ayudarais.

Un saludo.
  #2 (permalink)  
Antiguo 25/05/2011, 16:37
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: Assertion en sql2

¿Buscaste en San Google?, encontre debates interesantes como este:

http://www.sqlmonster.com/Uwe/Forum....oft-SQL-Server
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 25/05/2011, 16:42
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 5 meses
Puntos: 53
Respuesta: Assertion en sql2

Lo que podes utilizar son Triggers para este efecto, y asi poder restringir a tu gusto y antojo cada restriccion.

http://msdn.microsoft.com/en-us/libr...sql.80%29.aspx

por ejemplo para evitar una insercion en un trigger lo hacemos asi.
Código:
ALTER TRIGGER [dbo].[t_i_tabla]
   ON  [dbo].[tabla]
   instead of insert
AS 
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

--aca iria algo como 
--if((Select count(*) from Obras_subasta o, inserted i where i.evento = o.evento and i.pujador = o.pujador)>20)
--en el if anterior le digo que si ha ingresado mas de 20 lineas en en el evento no inserte datos.
return

END
tambien lo podemos hacer desde el For Insert con un rollback para nos devuelva un mensaje de error.

Código:

ALTER TRIGGER [dbo].[t_i_tabla]
   ON  [dbo].[tabla]
for insert  as  
if (select count(*) from titles, inserted      where titles.title_id = inserted.title_id) !=     @@rowcount     
rollback trigger with raiserror 25003      "Trigger rollback: salesdetail row not added      because a title_id does not exist in titles." 
Nos Vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila

Última edición por GeoAvila; 25/05/2011 a las 17:12

Etiquetas: assertion, sql, sql2, tablas
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 08:31.