2017-12-28 2 views
0

Lassen Sie uns sagen, ich habe diese @TempTable mit nur zwei Spalten ProductName und TempID:Wie stelle ich sicher, dass OUTPUT INSERTED in der richtigen Reihenfolge ist?

ProductName | TempID 
------------+------ 
GTX 1080 | NULL 
GTX 1080Ti | NULL 
RX 580  | NULL 

Ich werde dies zu TblProduct einfügen (2 Spalten: ProductName und ID) mit dem folgenden Befehl:

INSERT INTO TblProduct (ProductName) 
OUTPUT INSERTED.ID INTO @Test123(ID) 
    SELECT ProductName 
    FROM @TempTable 

Ist es garantiert, dass das Ergebnis in @Test123 in der richtigen Reihenfolge ist? Was bedeutet, dass, wenn das Ergebnis 1, 2 und 3.

  • 1 bis GTX 1080
  • 2 beziehen sollte GTX 1080Ti zu RX finden weitere 580
  • 3 sollte

Ist verweisen es möglich, TempID in @TempTable von ID in @Test123 zu aktualisieren? Wenn ja, wie? Ich dachte an so etwas wie UPDATE ... SELECT ...

+4

Tabellen haben keinen Auftrag, so Frage 1 strittig ist. – HoneyBadger

+0

@HoneyBadger: Was passiert, wenn ich 'SELECT Produktname von @TempTable ORDER BY ProductName' beim Einfügen. Werde ich dann bekommen können, was ich will? – warheat1990

Antwort

2

Nein, es ist überhaupt nicht gewährleistet.
Tabellen in einer relationalen Datenbank sind von Natur aus unsortiert - mit anderen Worten - die Datensätze haben keine eigene Reihenfolge.

Allerdings können Sie die Ausgabe mehr als eine Spalte der Ausgangs-Klausel, so dass für Ihre Beispieldaten, könnten Sie Ausgang sowohl ProductName und ID (natürlich bedeutet dies, dass der Tabellenvariable @Test123 haben muss (mindestens) diese beide Spalten):

INSERT INTO TblProduct (ProductName) 
OUTPUT INSERTED.ID, INSERTED.ProductName INTO @Test123(ID, ProductName) 
SELECT ProductName 
FROM @TempTable 

You can see a live demo on rextester

1

Wenn Sie die Zeilen erscheinen in alphabetischer Reihenfolge, wie in Ihrem Beispiel wollen, dann sagen:

select ProductName 
from TblProduct 
order by ProductName; 

Wenn Sie eine andere Bestellung wünschen, benötigen Sie eine Spalte, die diese Bestellung definiert, so dass Sie die entsprechende Bestellung auf die Select-Anweisung setzen können. Zum Beispiel, wenn Sie die Zeilen in der Reihenfolge erhalten möchten eingefügt Sie sie, definieren Sie Ihre Tabelle als:

create table TblProduct 
(
    id    int identity(1,1) not null, 
    ProductName varchar(20), 
    tempID   int 
); 

dann

select ProductName 
from TblProduct 
order by id; 
Verwandte Themen