prestige

Lab7_BD

May 4th, 2012
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.65 KB | None | 0 0
  1. GO
  2. USE master
  3. GO
  4. IF EXISTS (SELECT * FROM sys.DATABASES WHERE name='moedata')
  5.         DROP DATABASE moedata
  6. GO
  7. CREATE DATABASE moedata
  8. GO
  9. ALTER DATABASE moedata SET MULTI_USER
  10. GO
  11. USE moedata
  12. GO
  13. CREATE TABLE Street
  14. (StreetId INT NOT NULL IDENTITY(1,1)PRIMARY KEY,
  15. Name nvarchar(25) NOT NULL)
  16. GO
  17. ----GO
  18. INSERT INTO Street(Name)
  19.                  VALUES ('Пушкинская')
  20. INSERT INTO Street(Name)
  21.                  VALUES ('Лермонтовская')
  22. INSERT INTO Street(Name)
  23.                  VALUES ('Чуковская')
  24. INSERT INTO Street(Name)
  25.                  VALUES ('Толкиенская')
  26. --GO
  27. ----SELECT * FROM Street
  28. ----GO
  29. CREATE TABLE Fam
  30. (FamId INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
  31. Name nvarchar(25) NOT NULL)
  32. GO
  33. INSERT INTO Fam(Name)
  34.          VALUES ('Яблочных')
  35. INSERT INTO Fam(Name)
  36.          VALUES ('Апельсинов')
  37. INSERT INTO Fam(Name)
  38.          VALUES ('Виноградов')
  39. INSERT INTO Fam(Name)
  40.          VALUES ('Грушев')
  41. INSERT INTO Fam(Name)
  42.          VALUES ('Арбузова')
  43. --GO
  44. ----SELECT * FROM Fam
  45. --GO
  46. CREATE TABLE Subscriber
  47. (SubscriberId INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
  48. PhoneNumber nvarchar(9) NOT NULL,
  49. FamId INT NOT NULL,
  50. Iniz nvarchar(4) NOT NULL,
  51. Indeks nvarchar(5) NOT NULL,
  52. StreetId INT NOT NULL,
  53. HouseNumber INT NOT NULL,
  54. FlatNumber INT NOT NULL,
  55. Sex nvarchar(1) NOT NULL,
  56. FOREIGN KEY (FamID) REFERENCES Fam(FamId),
  57. FOREIGN KEY (StreetId) REFERENCES Street(StreetId))
  58. GO
  59. INSERT INTO Subscriber(PhoneNumber, FamId, Iniz,Indeks,StreetId, HouseNumber, FlatNumber, Sex)
  60.          VALUES ('745-34-19',1, 'А.А.','61005',2, 13,3,'М')
  61. INSERT INTO Subscriber(PhoneNumber, FamId, Iniz,Indeks,StreetId, HouseNumber, FlatNumber, Sex)
  62.          VALUES ('234-43-53',2, 'Р.В', '61005', 1,1,45,'М')
  63.          GO
  64. IF EXISTS( SELECT name FROM sys.Objects WHERE name='Proc1' AND TYPE='p')
  65. DROP PROCEDURE Proc1
  66. GO
  67.  
  68. CREATE PROCEDURE Proc1 @FamIdX1 INT, @NameX1 nvarchar(25),
  69. @SubscriberIdX INT, @PhoneNumberX nvarchar(9), @FamIdX3 INT,
  70. @InizX nvarchar(4),@IndeksX nvarchar(5),@StreetIdX3 INT, @HouseNumberX INT,
  71.  @FlatNumberX INT, @SexX nvarchar(1), @StreetIdX2 INT, @NameX2 nvarchar(25)
  72. AS
  73.     BEGIN TRANSACTION
  74.         IF NOT EXISTS(SELECT StreetId FROM Street WHERE name=@NameX2)
  75.         INSERT INTO Street(Name)
  76.                  VALUES (@NameX2)
  77.         DECLARE @St INT
  78.         SELECT @St=StreetId FROM Street WHERE name=@NameX2
  79.        
  80.         DECLARE @F INT
  81.         IF NOT EXISTS(SELECT * FROM Fam WHERE name=@NameX1)
  82.         INSERT INTO Fam(Name)
  83.                  VALUES (@NameX1)
  84.         SELECT @F=FamId FROM Fam WHERE name=@NameX1
  85.  
  86.         IF NOT EXISTS(SELECT * FROM Subscriber
  87.         WHERE PhoneNumber=@PhoneNumberX AND Iniz=@InizX AND
  88.         Sex=@SexX AND indeks=@IndeksX AND FamId=@F AND StreetId=@St)
  89.        
  90.         INSERT INTO Subscriber(PhoneNumber, FamId, Iniz,Indeks,StreetId, HouseNumber, FlatNumber, Sex)
  91.                  VALUES (@PhoneNumberX, @F, @InizX,@IndeksX ,@St, @HouseNumberX,@FlatNumberX,@SexX)
  92.         DECLARE @a INT
  93.         DECLARE @res INT
  94.         SET @a =CONVERT(INT,RAND()*5+1)
  95.         IF(@a=2)
  96.         BEGIN
  97.             ROLLBACK
  98.             SET @res=0
  99.             RETURN @res
  100.         END
  101.         ELSE
  102.         BEGIN
  103.             commit TRANSACTION
  104.             SET @res=1
  105.             RETURN @res
  106.         END
  107. GO
  108. IF OBJECT_ID(N'dbo.view1') IS NOT NULL
  109. DROP VIEW dbo.view1
  110. GO
  111. CREATE VIEW view1
  112. AS
  113.     SELECT Fam.Name,Subscriber.HouseNumber,Subscriber.Indeks FROM Subscriber
  114.     INNER JOIN Fam
  115.     ON Fam.FamId=Subscriber.FamId
  116.     INNER JOIN Street
  117.     ON Street.StreetId=Subscriber.StreetId
  118. GO
  119. DECLARE @b INT
  120. EXECUTE @b=Proc1 1,'Пушкинская',3,'745-34-19',1, 'А.А.','61005',1, 13,3,'М',1,'Яблочных'
  121. IF @b=1
  122.     print('Good')
  123. IF @b=0
  124.     print('Bad')
  125. SELECT * FROM view1
Advertisement
Add Comment
Please, Sign In to add comment