πρόβλημε σε trigger...

Συζητήσεις για τον Microsoft SQL Server

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Anastasia_M
Δημοσιεύσεις: 13
Εγγραφή: 04 Ιουν 2006 23:53

πρόβλημε σε trigger...

Δημοσίευση από Anastasia_M » 04 Ιουν 2006 23:58

Καλησπέρα,
έχω τους πίνακες

/*TABLE MOVIES */
CREATE TABLE MOVIES(
ID INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
TITLE VARCHAR (50) NOT NULL UNIQUE,
STOCK TINYINT );



/*TABLE CUSTOMERS*/
CREATE TABLE CUSTOMERS(
ID INT IDENTITY (1,1) PRIMARY KEY,
USERNAME VARCHAR(25) NOT NULL );


/*TABLE PURCHASE*/
CREATE TABLE PURCHASE(
C_ID INT,
M_ID INT,
QUANTITY INT,
FOREIGN KEY(M_ID) REFERENCES MOVIES(ID),
FOREIGN KEY(C_ID) REFERENCES CUSTOMERS(ID)
)


Κάνω μια εργασία με θέμα πώληση dvd και αντιμετωπίζω το παρακάτω πρόβλημα.
Έχω λοιπόν τον πίνακα MOVIES που αφορά τις ταινίες με χαρακτηριστικά το ID που είναι το κλειδί, το TITLE που είναι το όνομα της ταινίας και το STOCk που είναι το απόθεμα στο κατάστημα.
Τον πίνακα CUSTOMERS που αφορά τους πελάτες του καταστήματος με χαρακτηριστικά το ID το κλειδί και το username το όνομα του, ενώ υπάρχει και ο πίνακας PURCHASE που είναι η αγορά ταινίας από τον πελάτη και έχει χαρακτηριστικά το M_ID που αναφέρεται σε ποια ταινία θα αγοράσει ο πελάτης, το C_ID που δείχνει ποιος ακριβώς πελάτης θα την πάρει και το quantity που δείχνει σε τι ποσότητα.

Κάνουμε τις εισαγωγές

INSERT INTO CUSTOMERS VALUES('GIORGOS');

INSERT INTO MOVIES VALUES ('TROY',7);
INSERT INTO MOVIES VALUES ('TITANIC',10)΄;


Θέλω κάθε φορά που γίνεται μια εισαγωγή στον πίνακα της αγοράς (PURCHASE) να μειώνεται το απόθεμα(STOCK) των ταινίων μου στον πίνακα MOVIES, τόσο όσο θα έχει επιλέξει ο πελάτης(CUSTOMER) στη ποσότητα(QUANTITY). Δηλαδή θέλω να ενημερώνεται το απόθεμα κάθε ταινίας όταν αυτή αγοράζεται σε ποσότητα quantity.
Δημιουργώ το trigger ..

CREATE TRIGGER AFTER_PURSCHASE
ON PURCHASE
AFTER INSERT
as
UPDATE MOVIES
SET STOCK=STOCK-QUANTITY
FROM MOVIES AS M,PURCHASE AS p
WHERE M.ID=p.M_ID


Και κάνω εισαγωγές στο πίνακα αγορά (PURCHASE)
INSERT INTO PURCHASE VALUES(1,1,3);


Έχω λοιπόν ο πελάτης με κωδικό 1 αγοράζει την ταινία με κωδικό 1 σε ποσότητα 3 dvd
Βλέπουμε ότι το απόθεμα στον πίνακα MOVIES της ταινίας με κωδικό 1 μειώθηκε κανονικά όπως θέλαμε..από 7 σε 4..

Όταν κάνω την άλλη εισαγωγή
INSERT INTO PURCHASE VALUES(1,2,2);


Και παω να αγοράσω την ταινία με κωδικό 2 σε ποσότητα 2, το απόθεμα μειώνεται κατά 2 από 10 σε 8 όμως εξακολουθεί να μειώνεται και το απόθεμα από την πρώτη αγορά..το είδατε???μήπως μπορείτε να με βοηθήσετε??εγώ θέλω ενημέρωση μόνο στην ταινία που αγοράζεται και αυτό εξακολουθεί να μειώνει το stock της προηγούμενης αγοράς..


Σας δίνω τους κώδικες αν θέλετε δοκιμάστε τους. Είναι σε sql server 2005.
Ευχαριστώ

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27617
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

πρόβλημε σε trigger...

Δημοσίευση από cordis » 05 Ιουν 2006 10:59

CREATE TRIGGER AFTER_PURSCHASE
ON PURCHASE
AFTER INSERT
as
UPDATE MOVIES
SET STOCK=STOCK-QUANTITY
FROM MOVIES AS M,INSERTED AS p
WHERE M.ID=p.M_ID
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Απάντηση

Επιστροφή στο “MS SQL Server”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες