· 8 years ago · May 29, 2018, 10:46 AM
1------------------------------------------------------CONSTRAINTS-----------------------------------------------------------
2----NIF----
3ALTER TABLE TABLA
4 ADD CONSTRAINT CK_CAMPO CHECK( CAMPO LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][A-Z]')
5----TELEFONO----
6ALTER TABLE TABLA
7 ADD CONSTRAINT CK_CAMPO CHECK (CAMPO LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
8----OPCIONES A ELEGIR----
9ALTER TABLE TABLA
10 ADD CONSTRAINT CK_CAMPO CHECK (CAMPO IN( 'VALOR','VALOR','VALOR'))
11----BETWEEN----
12ALTER TABLE TABLA
13 ADD CONSTRAINT CK_TABLA CHECK(CAMPO BETWEEN MINI AND MAXI)
14
15------------------------------------------------------INDEX-----------------------------------------------------------
16----INDICE NO CLUSTERED SIN DUPLICADOS----
17CREATE UNIQUE INDEX IXTABLA ON TABLA(CAMPO)
18----INDICE NO CLUSTERED CON DUPLICADOS----
19CREATE INDEX IXTABLA ON TABLA(CAMPO)
20
21------------------------------------------------------AUTONUMERACION-----------------------------------------------------------
22----SE HACE AL CREAR LA TABLA----
23CAMPO SMALLINT IDENTITY(1,1) PRIMARY KEY,
24
25------------------------------------------------------RULES-----------------------------------------------------------
26----FECHA MENOR QUE LA ACTUAL----
27CREATE RULE FECHA AS (@CAMPO<=GETDATE())
28 SP_BINDRULE FECHA, 'TABLA.CAMPO'
29 EXEC SP_BINDRULE FECHA, 'TABLA.CAMPO'
30----FECHA POR DEFECTO LA ACTUAL----
31CREATE DEFAULT HOY AS GETDATE()
32 SP_BINDEFAULT HOY, 'TABLA.CAMPO'
33 EXEC SP_BINDEFAULT HOY, 'TABLA.CAMPO'
34----RULE PARA CIF----
35CREATE RULE CIF AS (@CAMPO LIKE( '[A-Z][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))
36 SP_BINDRULE CIF, 'TABLA.CAMPO'
37 EXEC SP_BINDRULE CIF, 'TABLA.CAMPO'
38----CAMPO MAYOR QUE 0---
39CREATE RULE POSITIVO AS (@CAMPO>=0)
40 SP_BINDEFAULT POSITIVO, 'TABLA.CAMPO'
41 EXEC SP_BINDEFAULT POSITIVO, 'TABLA.CAMPO'
42
43------------------------------------------------------RELACIONES-----------------------------------------------------------
44----PUEDE HABER DOS O MAS FOREIGN/PRIMARY KEYS EN UNA TABLA Y CADA NA PUEDE SER COMPUESTA O SIMPLE----
45----FOREIGN KEY COMPUESTA---
46ALTER TABLE TABLA
47 ADD CONSTRAINT FKTABLA FOREIGN KEY (CAMPO, CAMPO) REFERENCES TABLA(CAMPO,CAMPO)
48----FOREIGN KEY SIMPLE----
49ALTER TABLE TABLA
50 ADD CONSTRAINT FKTABLA FOREIGN KEY (CAMPO) REFERENCES TABLA(CAMPO)
51----PRIMARY KEY COMPUESTA----
52ALTER TABLE TABLA
53 ADD CONSTRAINT PKTABLA PRIMARY KEY (CAMPO,CAMPO)
54----PRIMARY KEY SIMPLE
55ALTER TABLE TABLA
56 ADD CONSTRAINT PKTABLA PRIMARY KEY (CAMPO)
57
58------------------------------------------------------PROCEDIMIENTOS ALMACENADOS-----------------------------------------------------------
59----DADO UN CAMPO, MOSTRAR DATOS DE OTRA TABLA DIFERENTE
60CREATE PROCEDURE P1
61 @CAMPO TIPO(CANTIDAD) --CANTIDAD SOLO SI ES CHAR,NVARCHAR...
62AS
63 SELECT CAMPO1,CAMPO2,CAMPO3 --CAMPOS A MOSTRAR ¡¡PREGUNTAR A ALBERTO SI ESTA BIEN!!
64 --SELECCIONAMOS LAS TABLAS (EJEMPLO DE 4 TABLAS)
65 FROM TABLA1 INNER JOIN ((TABLA2 INNER JOIN (TABLA3 INNER JOIN TABLA4
66 ON TABLA3.CAMPO = TABLA4.CAMPO)
67 ON TABLA2.CAMPO = TABLA3.CAMPO)
68 ON TABLA1.CAMPO = TABLA2.CAMPO)
69 WHERE TABLA.CAMPO = @CAMPO --EL CAMPO QUE QUEREMOS QUE SEA IGUAL
70
71--DADO UN CAMPO Y UNA CANTIDAD, ACTUALIZAR UN CAMP DE UNA TABLA A ESA CANTIDAD
72CREATE PROCEDURE P2
73 @DESCRIPCION TIPO(CANTIDAD), --NOMBRE DEL CAMPO AL CUAL LE CAMBIAREMOS LA CANTIDAD
74 @CANTIDAD INT
75AS
76 UPDATE TABLA --TABLA DEL CAMPO A CAMBIAR
77 SET STOCK=STOCK+@CANTIDAD --CAMPO A CAMBIAR
78 WHERE DESCRIPCIÓN=@DESCRIPCIÓN --DESCRIPCION DEL CAMPO A CAMBIAR
79
80--ELIMINAR LOS DATOS DE LAS TABLAS CORRESPONDIENTES SEGUN UNA CONDICION
81CREATE PROCEDURE P3
82AS
83 IF NOT EXISTS (SELECT * FROM SYSOBJECTS
84 WHERE name='PEDIDOS ANTIGUOS')
85 BEGIN
86 CREATE TABLE [PEDIDOS ANTIGUOS](
87 PEDIDO INT,
88 CODCLIENTE CHAR(4),
89 FECHAPEDIDO DATETIME
90 )
91 END
92 IF NOT EXISTS (SELECT * FROM SYSOBJECTS
93 WHERE name='DETALLES ANTIGUOS')
94 BEGIN
95 CREATE TABLE [DETALLES ANTIGUOS](
96 PEDIDO INT,
97 CODPRODUCTO INT,
98 UNIDADES INT,
99 DESCUENTO DECIMAL(2,2)
100 )
101 END
102----PRIMERO AÑADIMOS LOS DATOS VIEJOS A LAS NUEVAS TABLAS
103 ----NO HAY QUE HACER FROM PORQUE LA CONDICION ESTA EN LA MISMA TABLA(EN ESTE EJEMPLO)
104 INSERT INTO [TABLANUEVA1]
105 SELECT * FROM TABLAVIEJA1 WHERE CONDICION
106 ----HAY QUE HACER FROM PORQUE LA CONDICION ESTA EN LA MISMA TABLA(EN ESTE EJEMPLO)
107 INSERT INTO [TABLANUEVA2]
108 SELECT [TABLAVIEJA2].* FROM TABLA1 INNER JOIN TABLA2
109 ON TABLA1.CAMPO=TABLA2.CAMPO
110 WHERE CONDICION
111 DELETE FROM TABLAVIEJA2 WHERE CAMPO IN (SELECT CAMPO FROM TABLA
112 WHERE CONDICION)
113 ----SE PONE IN PORQUE PUEDE COGER MAS DE UN VALOR, si no se pone like
114 DELETE TABLAVIEJA1 WHERE CONDICION
115
116------------------------------------------------------TRIGGERS-----------------------------------------------------------
117----TRIGGER1
118----Al intentar insertar un registro en una tabla (el nombre de la tabla que suele poner Alberto aqui es la que hay que poner en la cabecera),
119----COMPROBAR (¡aqui tenemos la condicion!) que tenemos suficientes unidades (stock) de ese producto.
120----Si no es asÃ, mensaje de error (sin insertar, claro). Si hay suficientes unidades,
121----restar las unidades pedidas al stock. En este último caso, avisar con un mensaje si el stock se queda a 0.
122CREATE TRIGGER NOMBRETRIGGER ON TABLAAÑADIR ----TABLA DONDE VAMOS A COMPROBAR SI SE PUEDEN AÑADIR LOS NUEVOS REGISTROS
123-- DOS POSIBILIDADES ANTES DEL INSERT:
124--AFTER-> CUANDO ESTE CLARO QUE NO VAMOS A IMPEDIR LA INSERCION
125--INSTEAD OF -> CUANDO HAY UNA CONDICION
126INSTEAD OF INSERT
127AS
128 DECLARE @STOCK INT ----DECLARAMOS VARIABLES AUXILIARES PARA GUARDAR LOS VALORES QUE CONSIGAMOS
129 DECLARE @UNIDADES INT
130 SELECT @STOCK=STOCK FROM PRODUCTOS
131 WHERE CODPRODUCTO=(SELECT CODPRODUCTO FROM INSERTED) ----INSERTED ES UNA TABLA 'IMAGINARIA' DENDE SE GUARDA LOS DATOS ANTES INTRODUCIRLOS, UTILIZAR LA CLAVE PRIMARIA
132 SELECT @UNIDADES=UNIDADES FROM INSERTED ----GUARDAR LAS UNIDADES QUE SE QUIEREN METER PARA COMPROBAR
133 IF (@STOCK<@UNIDADES) ----COMPROBAR SI HAY SUFICIENTE STOCK
134 BEGIN ---- NO SE PORQUE SE PONE PERO HAY QUE PONERLO
135 PRINT 'No se puede atender este pedido, no hay suficiente stock' ----MENSAJE SI NO HAY ESTOCK
136 END
137 ELSE
138 BEGIN
139 INSERT INTO TABLAAÑADIR ----TABLA DONDE AÑADIMOS LOS NUEVOS REGISTROS
140 SELECT * FROM INSERTED
141 ----AÑADIMOS A LA TABLA LOS DATOS CORRESPONDIENTES DEL PEDIDO SI HAY STOCK
142 UPDATE TABLAACTUALIZAR ----TABLA DE LA QUE ACTUALIZAMOS EL STOCK
143 SET STOKC=STOCK-@UNIDADES
144 WHERE CLAVE=(SELECT CLAVE FROM INSERTED)
145 SELECT @STOCK=STOCK FROM PRODUCTOS
146 WHERE CLAVE=((SELECT CLAVE FROM INSERTED)
147 ----COMPROBAMOS SI EL STOCK SE QUEDA A 0 DESPUES DE AÑADIR EL PEDIDO
148 IF (@STOCK=0)
149 BEGIN
150 PRINT 'Cuidado! tras el pedido, producto sin stock'
151 END
152 END