Μπορείς να ορίσεις μια View η οποία θα έχει τα δεδομένα ταξινομημένα κατά τη σειρά που θέλεις, και μετά να κάνεις τα SELECT σου από αυτή τη View.
Π.χ. για τη Northwind και τον πίνακα Customers θα μπορούσαμε να έχουμε κάτι τέτοιο:
CREATE VIEW dbo.TestView
AS
SELECT
TOP 100 PERCENT
CustomerID
, CompanyName
, ContactName
, ContactTitle
, Address
, City, Region
, PostalCode
, Country
, Phone
, Fax
FROM
dbo.Customers
ORDER BY
City DESC
Το οποίο ταξινομει τις εγγραφές κατά το πεδίο CITY κατά φθίνουσα σειρά. Αν μετά κάνεις ένα SELECT * FROM dbo.TestView τα δεδομένα σου θα έρθουν σορταρισμένα
Εύλογες απορίες που μπορεί να έχεις:
1. Τι είναι αυτό το TOP 100 PERCENT; Δεν αυτοκαταργείται μια τέτοια δήλωση;
Αν επιχειρήσεις να βάλεις ORDER BY clause κατά την κατασκευή μιας View χωρίς να χρησιμοποιήσεις TOP clause θα χτυπήσει σφάλμα. Συγκεκριμένα θα λάβεις κάτι σαν το παρακάτω:
Server: Msg 1033, Level 15, State 1, Procedure TestView, Line 19
The ORDER BY clause is invalid in views, inline functions, derived tables, and subqueries, unless TOP is also specified.
2. Μπορώ να χρησιμοποιήσω αυτή τη View αντί του πίνακα για τις υπόλοιπες εργασίες μου (π.χ. UPDATE, DELETE κλπ);
Οχι. Ο λόγος είναι ακριβώς αυτό το αναθεματισμένο TOP. Π.χ αν επιχειρήσω να κάνω το εξής στην TestView:
UPDATE dbo.TestView
SET ContactTitle = 'Owner1'
WHERE CustomerID = 'WOLZA'
Θα πάρω ένα σφάλμα όπως το παρακάτω:
Server: Msg 4427, Level 16, State 1, Line 1
The view or function 'testview' is not updatable because the definition contains the TOP clause.
Πιστεύω με αυτά τα..ολίγα να βοήθησα κάπως. Αλλιώς, εδώ είμαστε πάλι!
Σωτήρης Φιλιππίδης
DotSee Web Services