· 6 years ago · Jul 05, 2019, 01:58 AM
1IF (SELECT 'FAIL' WHERE EXISTS ...) != '')
2vs
3IF (SELECT 'FAIL' WHERE EXISTS ...) != 'FAIL')
4
5CREATE TABLE ESCALA
6(
7 ID INTEGER IDENTITY NOT NULL,
8 NOME VARCHAR(150) NOT NULL,
9 STS VARCHAR(20) NOT NULL,
10 TIPO VARCHAR(20) NOT NULL,
11 DATA_ATUACAO_INICIAL DATETIME2 NOT NULL,
12 DATA_ATUACAO_FINAL DATETIME2 NOT NULL
13)
14
15CREATE TRIGGER IMPEDIR_ESCALA_MESMA_DATA_TIPO_INSERT ON ESCALA
16INSTEAD OF INSERT AS
17BEGIN
18 --Termina se não há registos para processar
19 IF NOT EXISTS (SELECT * FROM INSERTED)
20 RETURN;
21
22 IF NOT EXISTS (
23 SELECT 1
24 FROM INSERTED A
25 INNER JOIN ESCALA B
26 ON A.TIPO = B.TIPO -- Mesmo tipo
27 AND A.DATA_ATUACAO_INICIAL <= B.DATA_ATUACAO_FINAL -- Interseção entre as datas
28 AND A.DATA_ATUACAO_FINAL >= B.DATA_ATUACAO_INICIAL -- Interseção entre as datas
29 )
30 INSERT INTO ESCALA(NOME, STS, TIPO, DATA_ATUACAO_INICIAL, DATA_ATUACAO_FINAL)
31 SELECT NOME, STS, TIPO, DATA_ATUACAO_INICIAL, DATA_ATUACAO_FINAL FROM INSERTED
32 ELSE
33 RAISERROR ('NÃO FOI POSSÍVEL INSERIR A ESCALA, NÃO É POSSÍVEL DUAS ESCALAS DO MESMO TIPO ATUAREM NA MESMA DATA/HORA',16,1);
34
35 END
36END;
37
38INSERT INTO ESCALA(NOME, STS, TIPO, DATA_ATUACAO_INICIAL, DATA_ATUACAO_FINAL)
39SELECT 'NOME1', '1', '1', '2019-03-21 14:00:00.000000', '2019-03-21 17:00:00.000000'
40
41INSERT INTO ESCALA(NOME, STS, TIPO, DATA_ATUACAO_INICIAL, DATA_ATUACAO_FINAL)
42SELECT 'NOME2', '1', '1', '2019-03-20 14:00:00.000000', '2019-03-21 15:00:00.000000'
43
44CREATE TRIGGER IMPEDIR_ESCALA_MESMA_DATA_TIPO_UPDATE ON dbo.ESCALA
45INSTEAD OF UPDATE AS
46BEGIN
47 --Termina se não há registos para processar
48 IF NOT EXISTS (SELECT * FROM INSERTED)
49 RETURN;
50
51 IF NOT EXISTS (
52 SELECT 1
53 FROM INSERTED A
54 INNER JOIN dbo.ESCALA B
55 ON A.TIPO = B.TIPO -- Mesmo tipo
56 AND A.DATA_ATUACAO_INICIAL <= B.DATA_ATUACAO_FINAL
57 AND A.DATA_ATUACAO_FINAL >= B.DATA_ATUACAO_INICIAL
58 AND A.ID <> B.ID
59 )
60 UPDATE E
61 SET E.NOME = I.NOME
62 , E.STS = I.STS
63 , E.TIPO = I.TIPO
64 , E.DATA_ATUACAO_INICIAL = I.DATA_ATUACAO_INICIAL
65 , E.DATA_ATUACAO_FINAL = I.DATA_ATUACAO_FINAL
66 FROM INSERTED I
67 INNER JOIN ESCALA E
68 ON E.ID = I.ID
69 ELSE
70 RAISERROR ('NÃO FOI POSSÍVEL ATUALIZAR A ESCALA, NÃO É POSSÍVEL DUAS ESCALAS DO MESMO TIPO ATUAREM NA MESMA DATA/HORA',16,1);
71
72END
73
74INSERT INTO ESCALA(NOME, STS, TIPO, DATA_ATUACAO_INICIAL, DATA_ATUACAO_FINAL)
75 SELECT 'NOME1', '1', '1', '2019-03-21 14:00:00.000000', '2019-03-21 17:00:00.000000' UNION ALL
76 SELECT 'NOME2', '1', '1', '2019-03-20 14:00:00.000000', '2019-03-21 12:00:00.000000'