OUTPUT keyword

Έχουν δημοσιευτεί 17 Νοεμβρίου 05 12:34 πμ | KelMan 

Αν έχετε γράψει κώδικα για triggers θα ξέρετε τους ψευδοπίνακες Inserted και Deleted μέσω των οποίων μπορεί κανείς να αποκτήσει πρόσβαση στις τιμές των rows που γίνονται INSERT, UPDATE ή DELETE, ακριβώς πριν να ολοκληρωθεί η διαδικασία.

Για παράδειγμα, ένα τυπικό πρόβλημα που θα έπρεπε να χρησιμοποιήσουμε triggers, είναι όταν αλλάζουμε την τιμή όλων των προϊόντων που ανήκουν σε μια κατηγορία και το ζητούμενο είναι να καταγράφουμε σε έναν πίνακα την προηγούμενη τιμή, τη νέα τιμή, την ημέρα και ώρα της αλλαγής και τον χρήστη που κάνει την αλλαγή. Εναλλακτικά, αν δεν θέλουμε να χρησιμοποιήσουμε triggers, θα πρέπει να γράψουμε μια μακροσκελή stored procedure η οποία θα κάνει ένα iteration σε όλες τις εγγραφές, θα κάνει ένα-ένα τα UPDATE που θα ακολουθούνται από ένα INSERT στο logging πίνακα (Χωρίς cursors ε! Με τον άλλον τρόπο, τον καλό, με while loop).

Στον SQL Server 2005 μπορούμε να χρησιμοποιήσουμε το keyword OUTPUT το οποίο μπαίνει στα INSERT, UPDATE και DELETE statements και μας δίνει πρόσβαση στους πίνακες Inserted και Deleted αλλά χωρίς να βρισκόμαστε στο context ενός trigger!

Δείτε εδώ:

DECLARE @PriceChangeDetails TABLE
(ProductID int, OldPrice money
 NewPrice money, UpdatedBy sysname, UpdateDate datetime)
 
UPDATE Products
SET UnitPrice = UnitPrice * 1.05
OUTPUT INSERTED.ProductID, DELETED.UnitPrice, INSERTED.UnitPrice,
suser_name(), getdate() INTO @PriceChangeDetails
WHERE CategoryID = 1
 
SELECT * FROM @PriceChangeDetails

Αντίστοιχα, όπως και στους triggers, στα INSERT statements έχουμε πρόσβαση μόνο στον πίνακα Inserted και στα DELETE statements μόνο στον πίνακα Deleted.

Οι περιπτώσεις που δεν μπορούμε να χρησιμοποιήσουμε το OUTPUT keyword είναι όταν έχουμε INSERT πάνω σε view και όταν το DML γίνεται σε local/distributed partitioned tables/views ή σε remote tables/views

Δημοσίευση στην κατηγορία:

Σχόλια:

# George J. Capnias said on Νοεμβρίου 18, 2005 9:02 πμ:
Ουάου!

Μόνο και μόνο για αυτό το λόγο αξίζει να αρχίσει κάποιος να αναπτύσει όλα τα καινούργια Projects του σε SQL 2005.

Αυτό το feature είναι edition specific, ή υπάρχει σε όλες τις εκδόσεις του SQL 2005;

# KelMan said on Νοεμβρίου 18, 2005 10:15 μμ:
Δεν έχω βρει τίποτα που να αναφέρει ότι είναι edition specific...

Συνήθως edition specific είναι features που έχουν να κάνουμε με το scalability, το performance και τέτοια πράγματα
Έχει απενεργοποιηθεί η προσθήκη σχολίων από ανώνυμα μέλη

Search

Go

Συνδρομές