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.