0

Je construis l'application asp.net mvc, et je rencontre des problèmes pour écrire une procédure stockée SQL sur plusieurs tables.Procédure stockée SQL sur plusieurs tables

J'ai 7 tables différentes, toutes reliées entre elles.

Customer 
    Id 
    Name 

CustomerBook 
    Id 
    CustomerId 
    BookId 

Book 
    Id 
    Name 

BookType 
    Id 
    BookId 
    TypeId 

Type 
    Id 
    Name 

BookCategory 
    BookId 
    CategoryId 

Category 
    Id 
    Name 

Cela ressemble à quelque chose comme ça.

CustomerBook.CustomerId = Customer.Id 
CustomerBook.BookId = Book.Id 
BookCategory.BookId = Book.Id 
BookCategory.CategoryId = Category.Id 
BookType.BookId = Book.Id 
BookType.TypeId = Book.Id 

si je ne me trompe pas. Ce que je veux faire maintenant, c'est écrire la procédure stockée qui obtiendrait et montrerait tous les livres qui ont été "achetés" par l'utilisateur spécifique.

Je voudrais afficher:

Book name 
Book type 
Book category 

... pour chaque utilisateur, qui est actuellement connecté session.

Plus tard, je voudrais obtenir des données dans le contrôleur ... mais c'est un problème pour un autre jour.

Depuis que je suis assez nouveau pour les procédures et ne connais qu'un peu SQL, j'apprécierais vraiment votre aide!

C'est ce que je l'ai essayé jusqu'à présent:

CREATE PROCEDURE [dbo].[getBookByCustomerId] 
@Id int 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT * FROM [Customer] WHERE Id = @id 
END 

et maintenant je suis coincé ...

+2

Vous devriez suivre un didacticiel SQL. Ce sont des jointures de base et cela n'a rien à voir avec les procédures puisque vous venez de mettre le select dans la procédure à la fin. –

+0

S'il vous plaît envoyer la structure de la table et la relation –

+0

je sais comment rejoindre, puisque je l'ai déjà fait ci-dessus. je veux écrire la procédure, mais j'ai seulement trouvé des tutoriels de procédure de requête simple en ligne @juergend – aiden87

Répondre

2

Quelque chose comme ça devrait le faire:

CREATE PROCEDURE [dbo].[getBookByCustomerId] 
    @Id INT 
AS 
    BEGIN 
     SET NOCOUNT ON; 
     SELECT 
      B.Id, 
      B.Name, 
      T.Name, 
      C.Name 
     FROM Book B 
     INNER JOIN CustomerBook CB ON B.Id = CB.BookId 
     INNER JOIN BookType BT ON B.ID = BT.BookID 
     INNER JOIN Type T ON BT.TypeID = T.ID 
     INNER JOIN BookCategory BC ON B.BookId = BC.BookId 
     INNER JOIN Category C ON BC.CategoryId = C.CategoryId 
     WHERE CB.CustomerID = @Id; 
    END; 

Il obtiendra la ID du livre et nom où le numéro client est égal aux valeurs transmises.

enregistrements qui sont dans les deux tables, here est un bon message pour comprendre les jointures.

+0

pense que cela va me lancer. Je vous remercie! – aiden87

-1

Ici, le paramètre @Id signifie client id.

CREATE PROCEDURE [dbo].[getBookByCustomerId] 
@Id int 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT 
    B.Id, B.Name, T.Name, C.Name 
    FROM 
    Customer C 
    INNER JOIN 
    CustomerBook CB ON C.Id = CB.CustomerId 
    INNER JOIN 
    Book B ON B.Id = CB.Id 
    INNER JOIN 
    BookType BT ON B.Id = BT.BookId 
    INNER JOIN 
    Type T ON BT.TypeId = T.Id 
    INNERJOIN 
    BookCategory BC ON 
    BC.BookId = B.BookId 
    INNER JOIN 
    Category CT on CT.Id = BC.CategoryId 

    WHERE 
    C.Id = @Id 

END