|
Îåêßíçóå áðü ôï ìÝëïò George J. Capnias. Τελευταία δημοσίευση από το μέλος Markos στις 25-03-2012, 22:50. Υπάρχουν 10 απαντήσεις.
-
30-12-2008, 21:59
|
|
Εύρεση schema βάσης στον SQL Server
Κάτι 'μαγειρεύω' τις τελευταίες μέρες και προσπαθώ να βρω τρόπους να 'βρίσκω' το schema μιας βάσης του SQL Server. Έχω ακούσει και έχω βρει διάφορους τρόπους, αλλά δεν είμαι σίγουρος ποιος από όλους είναι ο καλύτερος.
Έχω κάποια SQL scripts που δίνουν το ποθητό αποτέλεσμα, αλλά δεν ξέρω πόσο 'wide' είναι - ξέρω ότι δουλέυουν στην έκδοση που έχω εγώ εγκατεστημένη, αλλά δεν ξέρω κατά πόσο δουλεύουν σε άλλες εκδόσεις του SQL server.
Για όποιον θέλει να βοηθήσει, ας τα τρέξει σε μια βάση που ξέρει το schema της, να δει κατά πόσο τα αποτελέσματα που επιστρέφουν είναι σωστά. Παρακαλώ μόνο να αναφέρεται και η έκδοση του SQL Server που έτρεξαν για να ξέρω που δοκιμάστηκαν. Τα script έτρεξαν σε SQL Server 2008 - 10.0.1600.22, RTM, Express Edition with Advanced Services.
Τα SQL scripts είναι τα παρακάτω:
--Tables
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' ORDER BY TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME
--Columns
SELECT * FROM INFORMATION_SCHEMA.COLUMNS INNER JOIN INFORMATION_SCHEMA.TABLES ON INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG = INFORMATION_SCHEMA.TABLES.TABLE_CATALOG AND INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA = INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA AND INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = INFORMATION_SCHEMA.TABLES.TABLE_NAME WHERE (INFORMATION_SCHEMA.TABLES.TABLE_TYPE = 'BASE TABLE') ORDER BY INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG, INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA, INFORMATION_SCHEMA.COLUMNS.TABLE_NAME, INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION
--PrimaryKeys
SELECT Constraints.TABLE_NAME, Constraints.CONSTRAINT_NAME, Keys.COLUMN_NAME, Keys.ORDINAL_POSITION FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS Constraints INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS Keys ON Constraints.CONSTRAINT_CATALOG = Keys.CONSTRAINT_CATALOG AND Constraints.CONSTRAINT_SCHEMA = Keys.CONSTRAINT_SCHEMA AND Constraints.CONSTRAINT_NAME = Keys.CONSTRAINT_NAME WHERE (Constraints.CONSTRAINT_TYPE = 'PRIMARY KEY') ORDER BY Constraints.TABLE_NAME, Constraints.CONSTRAINT_NAME, Keys.ORDINAL_POSITION
--ForeignKeys
SELECT Parent.TABLE_NAME AS ParentTableName, Parent.CONSTRAINT_NAME AS ParentConstrainName, ParentIndexes.COLUMN_NAME AS ParentColumnName, Child.TABLE_NAME AS ChildTableName, Child.CONSTRAINT_NAME AS ChildConstrainName, ChildIndexes.COLUMN_NAME AS ChildColumnName FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE AS Parent INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS Constraints ON Constraints.UNIQUE_CONSTRAINT_CATALOG = Parent.CONSTRAINT_CATALOG AND Constraints.UNIQUE_CONSTRAINT_SCHEMA = Parent.CONSTRAINT_SCHEMA AND Constraints.UNIQUE_CONSTRAINT_NAME = Parent.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE AS Child ON Constraints.CONSTRAINT_CATALOG = Child.CONSTRAINT_CATALOG AND Constraints.CONSTRAINT_SCHEMA = Child.CONSTRAINT_SCHEMA AND Constraints.CONSTRAINT_NAME = Child.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS ParentIndexes ON Parent.TABLE_CATALOG = ParentIndexes.TABLE_CATALOG AND Parent.TABLE_SCHEMA = ParentIndexes.TABLE_SCHEMA AND Parent.TABLE_NAME = ParentIndexes.TABLE_NAME AND Parent.CONSTRAINT_CATALOG = ParentIndexes.CONSTRAINT_CATALOG AND Parent.CONSTRAINT_SCHEMA = ParentIndexes.CONSTRAINT_SCHEMA AND Parent.CONSTRAINT_NAME = ParentIndexes.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS ChildIndexes ON Child.TABLE_CATALOG = ChildIndexes.TABLE_CATALOG AND Child.TABLE_SCHEMA = ChildIndexes.TABLE_SCHEMA AND Child.TABLE_NAME = ChildIndexes.TABLE_NAME AND Child.CONSTRAINT_CATALOG = ChildIndexes.CONSTRAINT_CATALOG AND Child.CONSTRAINT_SCHEMA = ChildIndexes.CONSTRAINT_SCHEMA AND Child.CONSTRAINT_NAME = ChildIndexes.CONSTRAINT_NAME ORDER BY ParentTableName, ParentColumnName, ChildTableName, ChildColumnName
Υπενθύμιση για να βρούμε την έκδοση του SQL Server που έχουμε εγκατεστημένη τρέχουμε το SQL statement:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
George J.
|
|
-
30-12-2008, 22:07
|
-
Markos
-
-

-
Μέλος από τις 26-10-2008
-
Αθήνα
-
Δημοσιεύσεις 874
-
-
|
Απ: Εύρεση schema βάσης στον SQL Server
Να κάνω μια ερώτηση. Γιατί όχι με SMO;
Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
|
|
-
30-12-2008, 23:22
|
|
Απ: Εύρεση schema βάσης στον SQL Server
Markos:Να κάνω μια ερώτηση. Γιατί όχι με SMO;
Πρέπει να είναι εγκαταστημένα τα SQL Client Tools για να έχεις SMO στο μηχάνημά σου. Πόσες είναι οι πιθανότητες να τα έχεις εγκατεστημένα σε ένα μηχάνημα που δεν είναι εγκαταστημένος ο SQL Server, και τι πιθανότητες έχεις να τα βρεις στο μηχάνημα ενός end-user;
George J.
|
|
-
30-12-2008, 23:28
|
-
Markos
-
-

-
Μέλος από τις 26-10-2008
-
Αθήνα
-
Δημοσιεύσεις 874
-
-
|
Απ: Εύρεση schema βάσης στον SQL Server
ΟΚ. Απλή απορία. Όσον αφορά τώρα στα scripts τα έτρεξα στην πιο σύνθετη βάση που έχω φτιάξει σε SQLServer 2005 Express και φαίνεται να δουλεύουν μια χαρά. Βέβαια, αυτό με την πρώτη ματιά, γιατί τα objects είναι πολλά. Αν διαπιστώσω κάτι θα κάνω post. Τι να πω... Ευχαριστώ για τα scipts!
Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
|
|
-
30-12-2008, 23:34
|
|
Απ: Εύρεση schema βάσης στον SQL Server
Η αλήθεια είναι ότι δεν θα με πείραζαν τα SMO Tools - ο αληθινός λόγος που θέλω να τα χρησιμοποιήσω, είναι ότι τα INFORMATION_SCHEMA views είναι μέρος του SQL-92 standard, αν καταλαβαίνεις προς τα που κατευθύνεται η προσπάθεια.
George J.
|
|
-
31-12-2008, 13:50
|
-
Filaretos
-
-

-
Μέλος από τις 29-03-2005
-
Καλλιθέα
-
Δημοσιεύσεις 157
-
-
|
Απ: Εύρεση schema βάσης στον SQL Server
Χρόνια Πολλά. Δοκίμασα τα script σε Sql Server 2000 έκδοση 8.00.2039 SP4 Standard Edition και δουλεύει μια χαρά.
Φιλάρετος Σεβαστιάδης. Albert Camus: Life is the sum of your choices.
|
|
-
31-12-2008, 19:55
|
|
Απ: Εύρεση schema βάσης στον SQL Server
Filaretos:Χρόνια Πολλά.
Δοκίμασα τα script σε Sql Server 2000 έκδοση 8.00.2039 SP4 Standard Edition και δουλεύει μια χαρά.
Ευχαριστώ πολύ για τη βοήθεια. Κάνοντας αναζήτηση στο Internet βρήκα μια δημοσίευση ότι ο SQL Server ξεκινώντας από την έκδοση 7 υποστηρίζει πλήρως το πρότυπο. Τώρα μένει να εξακριβώσω αν οι υπόλοιπες σχεσιακές βάσεις της Microsoft, τουλάχιστον, υποστηρίζουν το πρότυπο.
George J.
|
|
-
20-03-2012, 10:54
|
-
Markos
-
-

-
Μέλος από τις 26-10-2008
-
Αθήνα
-
Δημοσιεύσεις 874
-
-
|
Απ: Εύρεση schema βάσης στον SQL Server
Γιώργο, δε μπορείς να φανταστείς πόσο χρήσιμο μου φάνηκε αυτό το script τη συγκεκριμένη στιγμή! Αν έχεις κι άλλες τέτοιες εμπνεύσεις... ελεύθερα!!
Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
|
|
-
25-03-2012, 01:39
|
-
stefan
-
-

-
Μέλος από τις 24-12-2006
-
ΠΕΙΡΑΙΑΣ
-
Δημοσιεύσεις 17
-
-
|
Απ: Εύρεση schema βάσης στον SQL Server
Εξαιρετικό script. Μέχρι τώρα χρησιιμοποιούσα procedures sp_tables & sp_columns. Αυτό είναι καλύτερο και πολύ χρήσιμο για την ανίχνευση αλλαγών στo schema.
Stefan
|
|
-
25-03-2012, 16:22
|
|
Απ: Εύρεση schema βάσης στον SQL Server
Καλησπέρα, Η αλήθεια είναι ότι έχω εγκαταλήψει την ιδέα να τα κάνω αυτά με SQL κώδικα - ήταν σαν να προσπαθούσα να εφεύρω ξανά τον τροχό, όπως έχουν κάνει σχεδόν όλα τα ORM εκτός από το EF - μιας και οι περισσότεροι έχουμε μείνει με την εντύπωση ότι το παλιό ADOX έχει καταργηθεί. Η αλήθεια πως δεν έχει καταργηθεί, αλλά έχει ενσωματωθεί στο ADO.NET όπως και τα υπόλοιπα. Αν κάτσει και το ψάξει κάποιος λίγο παραπάνω, θα δει ότι όλη η τεχνολογία να δεις το schema μιας βάσης υπάρχει μέσα στο core του .NET και χρησιμοποιείται από την έκδοση 1.0 του κιόλας για να φτιάχνει τα typed datasets! Κάποια στιγμή είχα δημοσιεύσει μια βιβλιοθήκη με τα ευρήματά μου (Data.Common.DbSchema), και έχω τα εφαρμώσει να βρήσκω schema με κώδικα σχεδόν σε όλες τις βάσεις έχω χρησιμοποιήσει. Ο κώδικας που έχω επάνω στο Codeplex είναι 1.x, αλλά η βιβλιοθήκη έχει προχωρίσει αρκετά, και έχει και κάμποσα fixes που μου έχουν στήλει, παραμένει σε .NET v2.0, εκτός από κάποια Extensions που είχα φτιάξει για να παίξει και με LINQ. Σκεφτόμουν κάποια στιγμή να ξανακάνω ένα re-write σε .NET 4.x και να αφαιρέσω τα datasets από μέσα... George J.
|
|
-
25-03-2012, 22:50
|
-
Markos
-
-

-
Μέλος από τις 26-10-2008
-
Αθήνα
-
Δημοσιεύσεις 874
-
-
|
Απ: Εύρεση schema βάσης στον SQL Server
Τα ORMs και τα DALs είναι η μία όψη του νομίσματος η οποία, μάλιστα, δεν έχει εξαντληθεί όσο πιστεύουμε. Για τον χ, ψ, ζ, λόγο, κάποια στιγμή, είμαστε αναγκασμένοι για χρησιμοποιήσουμε ORMs για οποία δεν υπάρχουν code generators ούτε για τις κλάσεις ούτε για το DAL. Οι κλάσεις πρέπει να γραφτούν με το χέρι, καθώς και όλα τ' άλλα. Και καλά να γνωρίζεις το business model. Αν έχει πλήρη μεσάνυχτα περί του τίνος πρόκειται, τότε τι κάνεις; Η απάντηση είναι: reverse engineering στη βάση (η άλλη όψη του νομίσματος). Και καλά η βάση να έχει 10, 20, 30 πίνακες. Αν έχει 200, 300, 400 ή και περισσότερους, κλάφτα Χαράλαμπε! Προσοχή. Μιλάμε για άγνωστο business model. Αυτό σε δυσκολεύει και στη συγγραφή του presentation κώδικα. Το να προσπαθήσω να διαβάσω ένα διάγραμμα με 300+ πίνακες είναι αποθαρρυντικό. Πρέπει να φτιάξω μικρότερα, προσπαθώντας να μαντέψω ποιοι πίνακες πρέπει να μπουν μαζί και ποιοι όχι. Και μετά να καταλάβω πως λειτουργεί συνολικά το μοντέλο μου. Κατά τη γνώμη μου, το θέμα έχει ακόμα πολύ ψωμί. Μάλιστα, πείστηκα ακόμα περισσότερο γι' αυτό όταν διάβασα αυτή τη συζήτηση. Ο τύπος τα είχε παίξει. Εδώ που τα λέμε, ο καθένας θα τα έπαιζε με τέτοιο μέγεθος βάσης...
Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
|
|
|
|
|