2016-04-27 7 views
0

Lassen Sie sich das nach dem Einsetzen berücksichtigen:Wie funktioniert das Einfügen in Select intern in SQL Server?

INSERT INTO SOMETABLE 
SELECT * FROM SOMETABLE 
WHERE Column > NUMBER 

Gibt es ein Risiko, dass aufgrund Einfügen geändert werden kann, die SELECT Anweisung gesetzt Ergebnis? In den anderen Worten, wie oft die SELECT-Anweisung kann von Abfrage-Engine INSERT INTO SELECT auf die gleiche Tabelle durchgeführt werden?

Annahme: Ein einzelnes Thread-Szenario ohne gleichzeitige Transaktionen.

+4

Nein. Ein Einfügevorgang ist ein einzelner ACIDic-Vorgang. Wenn es nicht gäbe, gäbe es massive Probleme mit dem gesamten Konzept einer Datenbank. https://en.wikipedia.org/wiki/ACID –

+0

Ich denke das gleiche, aber ich war überrascht, als ich sah, dass einzelne Zeile wurde mehrmals statt nur einmal dupliziert. Vielleicht hatte ich Halluzinationen, die ich noch einmal überprüfen werde. – tgrabus

+0

@grabus: Verwenden Sie Joins? Es ist praktisch, die INSERT-Zeile zu kommentieren und nur den SELECT-Teil auszuführen, um solche Anfragen zu behandeln. Auf diese Weise können Sie überprüfen, ob Ihre SELECT-Anweisung die erwarteten Daten erfasst. Ich vermute, Sie haben einen falsch konfigurierten Join oder einige schlechte Daten. Wenn Sie eindeutige Datensätze einfügen möchten, kann 'DISTINCT' dabei helfen. – Ellesedil

Antwort

0

Besteht das Risiko, dass die Ergebnismenge der SELECT-Anweisung aufgrund des Einfügens geändert werden kann?

Nein, die Ergebnismenge der SELECT Anweisung nicht von den INSERT betroffen sein. Das Ergebnis der SELECT wird dasselbe sein, als ob Sie es selbst ausgeführt hätten.