Gibt es trotzdem, SQL Server Management Objects Traversal einer vorhandenen Datenbank zu beschleunigen?

StackOverflow https://stackoverflow.com/questions/401740

  •  03-07-2019
  •  | 
  •  

Frage

Ich bin derzeit mit SMO und C # Datenbanken zu durchqueren einen Baum von Einstellungen erstellen verschiedene Aspekte der beiden Datenbanken darstellen, dann diese Bäume zu vergleichen, um zu sehen, wo und wie sie anders sind.

Das Problem ist, für zwei recht große Datenbank, ist es fast 10 Minuten dauert sie lokal zu kriechen und sammeln Tabelle / Spalte / Stored Procedure Informationen Ich möchte vergleichen.

Gibt es eine bessere Schnittstelle dann SMO für den Zugriff auf Datenbanken in einer solchen Art und Weise? Ich möchte keine zusätzlichen Abhängigkeiten enthalten, aber ich werde diesen Schmerz für eine 50% ige Verbesserung der Geschwindigkeit nehmen. Unten ist ein Beispiel dafür, wie ich Tabellen und Spalten bin aufzählt.

        Microsoft.SqlServer.Management.Smo.Database db = db_in;
        foreach (Table t in db.Tables)
        {
            if (t.IsSystemObject == false)
            {

                foreach (Column c in t.Columns)
                {
                }                    
            }
        }
War es hilfreich?

Lösung

Versuchen Sie SMO zu zwingen, alle erforderlichen Felder auf einmal zu lesen, anstatt über den Zugang von Abfragen. Siehe diesen Blog für weitere Informationen


EDIT: Link ist tot, aber ich finde die Seite auf archive.org. Hier ist der relevante Code:

Server server = new Server();

// Force IsSystemObject to be returned by default.
server.SetDefaultInitFields(typeof(StoredProcedure), "IsSystemObject");

StoredProcedureCollection storedProcedures = server.Databases["AdventureWorks"].StoredProcedures;

foreach (StoredProcedure sp in storedProcedures) {
    if (!sp.IsSystemObject) {
        // We only want user stored procedures
    }
}

Andere Tipps

Es gibt wenig, dass Sie nicht über T-SQL-Abfragen bekommen. Erste Metadaten, die Art und Weise in der Regel sehr schnell ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top