Wir schreiben eine neue Anwendung, und während des Testens benötigen wir eine Reihe von Dummy-Daten. Ich habe diese Daten mithilfe von MS Access hinzugefügt, um Excel-Dateien in den entsprechenden Tabellen abzulegen.
Von Zeit zu Zeit möchten wir die relevanten Tabellen "aktualisieren", dh sie alle löschen, neu erstellen und eine gespeicherte MS Access-Append-Abfrage ausführen.
Der erste Teil (Löschen und Neuerstellen) ist ein einfaches SQL-Skript, aber der letzte Teil lässt mich zusammenzucken. Ich möchte ein einzelnes Setup-Skript mit einer Reihe von INSERTs, um die Dummy-Daten neu zu generieren.
Ich habe jetzt die Daten in den Tabellen. Was ist der beste Weg, um automatisch eine große Liste von INSERT-Anweisungen aus diesem Datensatz zu generieren?
Die einzige Möglichkeit, die ich mir vorstellen kann, besteht darin, die Tabelle in einem Excel-Blatt zu speichern und dann eine Excel-Formel zu schreiben, um für jede Zeile ein INSERT zu erstellen. Dies ist sicherlich nicht der beste Weg.
Ich verwende 2008 Management Studio, um eine Verbindung zu einer SQL Server 2005-Datenbank herzustellen.
quelle
Antworten:
Microsoft sollte diese Funktionalität von SSMS 2008 bekannt machen. Die gesuchte Funktion ist in das Generate Script integriert Dienstprogramm " Funktionalität ist jedoch standardmäßig und muss eine Tabelle aktiviert werden.
Dies ist ein kurzer Durchlauf, um die
INSERT
Anweisungen für alle Daten in Ihrer Tabelle zu generieren , ohne Skripts oder Add-Ins für SQL Management Studio 2008 zu verwenden:Sie erhalten dann die
CREATE TABLE
Anweisung und alleINSERT
Anweisungen für die Daten direkt aus SSMS.quelle
Data only
undCyclic dependencies found
feststellen, wechseln Sie zuSchema and data
, um den Fehler zu vermeiden. Passiert in Management Studio v17.Wir verwenden diese gespeicherte Prozedur. Sie ermöglicht es Ihnen, auf bestimmte Tabellen abzuzielen und where-Klauseln zu verwenden. Den Text finden Sie hier .
So können Sie beispielsweise Folgendes tun:
Quellcode vom Link kopiert:
quelle
Wie von @Mike Ritacco erwähnt, aber für SSMS 2008 R2 aktualisiert
Sie erhalten dann alle INSERT-Anweisungen für die Daten direkt aus SSMS.
BEARBEITEN 2016-10-25 SQL Server 2016 / SSMS 13.0.15900.1
Klicken Sie mit der rechten Maustaste auf den Datenbanknamen
Wählen Sie Aufgaben> Skripte generieren
Abhängig von Ihren Einstellungen wird die Intro-Seite möglicherweise angezeigt oder nicht
Wählen Sie "Bestimmte Datenbankobjekte auswählen".
Erweitern Sie die Baumansicht und überprüfen Sie die entsprechenden Tabellen
Weiter klicken
Klicken Sie auf Erweitert
Wählen Sie im Abschnitt "Allgemein" die entsprechende Option für "Zu skriptende Datentypen" aus.
OK klicken
Wählen Sie aus, ob die Ausgabe in eine neue Abfrage, in die Zwischenablage oder in eine Datei verschoben werden soll
Klicken Sie zweimal auf Weiter
Ihr Skript wird gemäß den oben ausgewählten Einstellungen erstellt
Klicken Sie auf Fertig stellen
quelle
Dies kann auch mit erfolgen
Visual Studio
(zumindest ab Version 2013).In VS 2013 ist es auch möglich , die Liste der Zeilen zu filtern, auf denen die Einfügeanweisung basiert. Dies ist in SSMS meines Wissens nicht möglich.
Führen Sie die folgenden Schritte aus:
Dadurch werden die (bedingten) Einfügeanweisungen für die ausgewählte Tabelle im aktiven Fenster oder in der aktiven Datei erstellt.
Die Schaltflächen "Filter" und "Skript" Visual Studio 2013 :
quelle
Sie können das SSMS Tools Pack verwenden (verfügbar für SQL Server 2005 und 2008). Es verfügt über eine Funktion zum Generieren von Einfügeanweisungen.
http://www.ssmstoolspack.com/
quelle
Ich verwende SSMS 2008 Version 10.0.5500.0. In dieser Version wird im Rahmen des Assistenten zum Generieren von Skripten anstelle einer Schaltfläche "Erweitert" der folgende Bildschirm angezeigt. In diesem Fall wollte ich nur die Daten einfügen und keine create-Anweisungen, also musste ich die beiden eingekreisten Eigenschaften ändern
quelle
Gespeicherte Prozedur von Jane Dallaway: http://docs.google.com/leaf?id=0B_AkC4ZdTI9tNWVmZWU3NzAtMWY1My00NjgwLWI3ZjQtMTY1NDMxYzBhYzgx&hl=de_GB . Die Dokumentation besteht aus einer Reihe von Blog-Posts: https://www.google.com/search?q=spu_generateinsert&as_sitesearch=http%3A%2F%2Fjane.dallaway.com
quelle
Wenn Sie einen programmgesteuerten Zugriff benötigen, können Sie eine Open Source-gespeicherte Prozedur `GenerateInsert.
Generator für INSERT-Anweisung (en)
Um als einfaches und schnelles Beispiel INSERT-Anweisungen für eine Tabelle zu generieren,
AdventureWorks.Person.AddressType
führen Sie die folgenden Anweisungen aus:Dadurch wird das folgende Skript generiert:
quelle
Der erste Link zu sp_generate_inserts ist ziemlich cool, hier ist eine wirklich einfache Version:
Auf meinem System erhalte ich folgendes Ergebnis:
quelle
Mein Beitrag zum Problem, ein Powershell INSERT-Skriptgenerator, mit dem Sie mehrere Tabellen skripten können, ohne die umständliche SSMS-GUI verwenden zu müssen. Hervorragend geeignet, um schnell "Seed" -Daten in die Quellcodeverwaltung zu integrieren.
Standardmäßig lautet das generierte INSERT-Skript "SeedData.sql" im selben Ordner wie das Skript.
Sie müssen die SQL Server Management Objects-Assemblys installiert haben, die vorhanden sein sollten, wenn Sie SSMS installiert haben.
quelle
Verwenden Sie keine Einsätze, sondern BCP
quelle
Möglicherweise können Sie den SQL Server-Veröffentlichungsassistenten http://www.microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=de ausprobieren
Es verfügt über einen Assistenten, mit dem Sie Anweisungen zum Einfügen von Skripten ausführen können.
quelle
GenerateData ist ein erstaunliches Werkzeug dafür. Es ist auch sehr einfach, Änderungen daran vorzunehmen, da der Quellcode für Sie verfügbar ist. Ein paar nette Features:
quelle
Ich habe dieses Skript verwendet, das ich in mein Blog gestellt habe ( So generieren Sie Anweisungen zum Einfügen von Anweisungen auf einem SQL Server ).
Bisher hat es für mich funktioniert, obwohl es sich möglicherweise um Fehler handelt, die ich noch nicht entdeckt habe.
quelle
Ich benutze dafür SQLite. Ich finde es sehr, sehr nützlich, um Scratch- / Test-Datenbanken zu erstellen.
sqlite3 foo.sqlite .dump > foo_as_a_bunch_of_inserts.sql
quelle
Haben Sie schon Daten in einer Produktionsdatenbank? In diesem Fall können Sie eine Periodenaktualisierung der Daten über DTS einrichten. Wir machen unsere wöchentlich an den Wochenenden und es ist sehr schön, jede Woche saubere, echte Daten für unsere Tests zu haben.
Wenn Sie noch keine Produktion haben, sollten Sie eine Datenbank erstellen, die Sie möchten (frisch). Duplizieren Sie dann diese Datenbank und verwenden Sie diese neu erstellte Datenbank als Testumgebung. Wenn Sie die saubere Version möchten, duplizieren Sie einfach Ihre saubere Version erneut und Bob ist Ihr Onkel .
quelle
Wenn Sie lieber Google Sheets verwenden möchten , verwenden Sie SeekWell um die Tabelle an ein Blatt zu senden, und fügen Sie dann Zeilen in einen Zeitplan ein, wenn sie dem Blatt hinzugefügt werden.
Sehen Sie sich hier den schrittweisen Prozess an oder sehen Sie sich hier eine Videodemo der Funktion an.
quelle
Es gibt oben viele gute Skripte zum Generieren von Einfügeanweisungen, aber ich habe versucht, eine eigene zu erstellen, um sie so benutzerfreundlich wie möglich zu gestalten und auch UPDATE-Anweisungen ausführen zu können. + Packen Sie das Ergebnis bereit für SQL-Dateien, die nach Datum gespeichert werden können.
Als Eingabe wird Ihre normale SELECT-Anweisung mit der WHERE-Klausel verwendet und anschließend eine Liste von Insert-Anweisungen und Update-Anweisungen ausgegeben. Zusammen bilden sie eine Art IF NOT EXISTS () INSERT ELSE UPDATE. Dies ist auch praktisch, wenn nicht aktualisierbare Spalten vorhanden sind, die von der endgültigen INSERT / UPDATE-Anweisung ausgeschlossen werden müssen.
Eine andere Sache, die das folgende Skript tun kann, ist: Es kann sogar INNER JOINs mit anderen Tabellen als Eingabeanweisung für den gespeicherten Prozess verarbeiten. Es kann als Release-Management-Tool eines armen Mannes nützlich sein, das direkt an Ihren Fingerspitzen sitzt, wo Sie den ganzen Tag die SQL SELECT-Anweisungen eingeben.
Originalbeitrag: Generieren Sie eine UPDATE-Anweisung in SQL Server für eine bestimmte Tabelle
quelle
Warum sichern Sie nicht einfach die Daten, bevor Sie damit arbeiten, und stellen sie dann wieder her, wenn Sie möchten, dass sie aktualisiert werden?
Wenn Sie Einfügungen generieren müssen, versuchen Sie: http://vyaskn.tripod.com/code.htm#inserts
quelle
Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe.
Wenn Sie Daten in MS-Access haben, die Sie auf SQL Server verschieben möchten, können Sie DTS verwenden.
Und ich denke, Sie könnten den SQL-Profiler verwenden, um alle INSERT-Anweisungen zu sehen, nehme ich an.
quelle
Ich habe auch viel darüber recherchiert, aber ich konnte keine konkrete Lösung dafür finden. Derzeit verfolge ich den Inhalt in Excel aus SQL Server Managment Studio, importiere die Daten in Oracle-TOAD und generiere dann die insert-Anweisungen
quelle
Mit dieser einfachen und kostenlosen Anwendung, die ich vor einigen Jahren geschrieben habe, können Sie eine INSERT- oder MERGE- Anweisung generieren : Data Script Writer (Desktop-Anwendung für Windows)
Außerdem habe ich kürzlich einen Blogbeitrag über diese Tools und den Ansatz zur Nutzung von SSDT für eine Bereitstellungsdatenbank mit Daten geschrieben. Weitere Informationen :
Skript und Bereitstellung der Daten für die Datenbank aus dem SSDT-Projekt
quelle
Ich habe ein einfach zu bedienendes Dienstprogramm erstellt, hoffe es gefällt euch.
Wenn die generierten INSERT - Anweisungen abgeschnitten werden, überprüfen Sie die Grenze Textlänge der Ergebnisse auf dem Management Studio Optionen:
Tools > Options
,Query Results > SQL Server > Results to Grid
, „Non XML - Daten“ Wert unter „Maximale Zeichen Abgerufen“.quelle