Advertisement
anchormodeling

Temporal Uniqueness

Jun 12th, 2012
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 1.45 KB | None | 0 0
  1. CREATE FUNCTION [dbo].[pAC_NAM_Actor_Name] (@changingTimepoint date)
  2. RETURNS TABLE WITH SCHEMABINDING AS RETURN
  3. SELECT
  4.    AC_ID,
  5.    AC_NAM_Actor_Name,
  6.    AC_NAM_ChangedAt
  7. FROM
  8.    [dbo].[rAC_NAM_Actor_Name](@changingTimepoint) AC_NAM
  9. WHERE
  10.    AC_NAM_ChangedAt = (
  11.         SELECT
  12.             MAX(sub.AC_NAM_ChangedAt)
  13.         FROM
  14.             [dbo].[rAC_NAM_Actor_Name](@changingTimepoint) sub
  15.         WHERE
  16.             sub.AC_ID = AC_NAM.AC_ID
  17.    );
  18.  
  19. GO
  20. CREATE FUNCTION [dbo].[qAC_NAM_Actor_Name](
  21.     @AC_ID int,
  22.     @AC_NAM_Actor_Name varchar(42),
  23.     @AC_NAM_ChangedAt datetime
  24. )
  25. RETURNS INT
  26. BEGIN
  27. RETURN (
  28.     SELECT
  29.         COUNT(*)
  30.     FROM
  31.         [dbo].[pAC_NAM_Actor_Name](@AC_NAM_ChangedAt)
  32.     WHERE
  33.         AC_ID <> @AC_ID
  34.     AND
  35.         AC_NAM_Actor_Name = @AC_NAM_Actor_Name
  36. )
  37. END
  38.  
  39. GO
  40. ALTER TABLE [dbo].[AC_NAM_Actor_Name]
  41. ADD CONSTRAINT uqAC_NAM_Actor_Name
  42. CHECK ([dbo].[qAC_NAM_Actor_Name](AC_ID, AC_NAM_Actor_Name, AC_NAM_ChangedAt) = 0);
  43.  
  44. GO
  45. INSERT INTO lAC_Actor (AC_NAM_Actor_Name, AC_NAM_ChangedAt)
  46. VALUES('Nathalie', '2009-09-21');
  47. INSERT INTO lAC_Actor (AC_ID, AC_NAM_Actor_Name, AC_NAM_ChangedAt)
  48. VALUES(1, 'Nat', '2012-06-12');
  49. INSERT INTO lAC_Actor (AC_NAM_Actor_Name, AC_NAM_ChangedAt)
  50. VALUES('Nathalie', '2012-06-12');
  51. INSERT INTO lAC_Actor (AC_NAM_Actor_Name, AC_NAM_ChangedAt)
  52. VALUES('Nathalie', '2012-06-12');
  53. -- next insert should fail because of the constraint
  54. INSERT INTO lAC_Actor (AC_NAM_Actor_Name, AC_NAM_ChangedAt)
  55. VALUES('Nathalie', '2012-12-12');
  56.  
  57. SELECT * FROM lAC_Actor;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement