Advertisement
anchormodeling

Uniqueness constraints

Oct 12th, 2015
30,120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.71 KB | None | 0 0
  1. CREATE TRIGGER uq_ST_NAM_Stage_Name
  2. ON [dbo].[ST_NAM_Stage_Name]
  3. AFTER INSERT
  4. AS
  5. IF EXISTS (
  6.     SELECT
  7.         i.ST_NAM_Stage_Name
  8.     FROM
  9.         inserted i
  10.     CROSS APPLY (
  11.         SELECT
  12.             st.ST_NAM_Stage_Name
  13.         FROM
  14.             [dbo].[pST_Stage](i.ST_NAM_ChangedAt) st
  15.         WHERE
  16.             st.ST_ID <> i.ST_NAM_ST_ID
  17.         AND
  18.             st.ST_NAM_Stage_Name = i.ST_NAM_Stage_Name
  19.     ) ts
  20. )      
  21. BEGIN
  22.     DECLARE @msg varchar(2047) = 'Duplicate stage name found.';
  23.     RAISERROR (@msg, 16, 1);
  24.     ROLLBACK TRANSACTION;
  25.     RETURN;
  26. END;
  27.  
  28. CREATE TRIGGER uq_PE_DAT_Performance_Date
  29. ON [dbo].[PE_DAT_Performance_Date]
  30. AFTER INSERT
  31. AS
  32. IF EXISTS (
  33.     SELECT
  34.         i.PE_DAT_Performance_Date
  35.     FROM
  36.         inserted i
  37.     JOIN
  38.         [dbo].[lPE_wasHeld_ST_at] pest
  39.     ON
  40.         pest.PE_ID_wasHeld = i.PE_DAT_PE_ID
  41.     CROSS APPLY (
  42.         SELECT
  43.             pe.PE_DAT_Performance_Date
  44.         FROM
  45.             [dbo].[lPE_Performance] pe
  46.         JOIN
  47.             [dbo].[lPE_wasHeld_ST_at] sub_pest
  48.         ON
  49.             sub_pest.PE_ID_wasHeld = pe.PE_DAT_PE_ID
  50.         WHERE
  51.             sub_pest.ST_ID_at = pest.ST_ID_at
  52.         AND
  53.             pe.PE_ID <> i.PE_DAT_PE_ID
  54.         AND
  55.             DATEDIFF(day, pe.PE_DAT_Performance_Date, i.PE_DAT_Performance_Date) = 0
  56.     ) ts
  57. )      
  58. BEGIN
  59.     DECLARE @msg varchar(2047) = 'Performances on the same stage and day was found.';
  60.     RAISERROR (@msg, 16, 1);
  61.     ROLLBACK TRANSACTION;
  62.     RETURN;
  63. END;
  64.  
  65. /*
  66.     Note that this trigger is only necessary if the following load
  67.     order cannot be guaranteed.
  68.  
  69.     1. Create identities for PE performance
  70.     2. Assign stages ST_ID to the created PE_ID in the tie
  71.     3. Populate the attributes of the PE performance anchor
  72.  
  73. */
  74. CREATE TRIGGER uq_PE_wasHeld_ST_at__PE_DAT_Performance_Date
  75. ON [dbo].[PE_wasHeld_ST_at]
  76. AFTER INSERT
  77. AS
  78. IF EXISTS (
  79.     SELECT
  80.         i.PE_ID_wasHeld
  81.     FROM
  82.         inserted i
  83.     JOIN
  84.         [dbo].[PE_DAT_Performance_Date] dat
  85.     ON
  86.         dat.PE_DAT_PE_ID = i.PE_ID_wasHeld
  87.     CROSS APPLY (
  88.         SELECT
  89.             pe.PE_DAT_Performance_Date
  90.         FROM
  91.             dbo.lPE_wasHeld_ST_at sub_pest
  92.         JOIN
  93.             [dbo].[lPE_Performance] pe
  94.         ON
  95.             pe.PE_ID = sub_pest.PE_ID_wasHeld
  96.         WHERE
  97.             sub_pest.ST_ID_at = i.ST_ID_at
  98.         AND
  99.             pe.PE_ID <> dat.PE_DAT_PE_ID
  100.         AND
  101.             DATEDIFF(day, pe.PE_DAT_Performance_Date, dat.PE_DAT_Performance_Date) = 0
  102.     ) ts
  103. )      
  104. BEGIN
  105.     DECLARE @msg varchar(2047) = 'Performances on the same stage and day was found.';
  106.     RAISERROR (@msg, 16, 1);
  107.     ROLLBACK TRANSACTION;
  108.     RETURN;
  109. END;
  110. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement