2012-10-11 7 views
9

Ich habe versucht, die gleichen Tabellendaten aus denselben Tabellendaten zu aktualisieren.Aktualisieren Sie die gleiche Tabelle in SQL Server

Mein SP ist wie folgt:

UPDATE T1 
SET T1.Name = T2.Name 
    , T1.Age = T2.Age 
    , T1.Subject = T2.Subject 
FROM Student T1 
    , Student T2 
WHERE T1.StudentID = @OldID 
    AND T2.StudentID = @NewID 

Wenn ich diese Abfrage bin Ausführung, kein Fehler vorhanden ist. Aber das Update funktioniert nicht.

diese [hier keine gemeinsamen Spaltenwerte wie T1.StudentID = T2.StudentID vergleichen]
+4

Sind '@ OldID' und' @ NewID' identisch? – Oded

+1

Ihre Abfrage sollte funktionieren (http://sqlfiddle.com/#!3/d7728/13). Vielleicht sind '@ OldID' und' @ NewID' identisch mit @Oded. –

+0

Ja, sie sind identisch. Studentid ist eine eindeutige Kennung. –

Antwort

5

Versuchen:

UPDATE t1 
SET t1.name = t2.name, t1.age = t2.age, t1.subject = t2.subject 
FROM student t1 
INNER JOIN 
student t2 
ON t1.StudentID = @oldID 
AND t2.StudentID = @NewID 

Das vollständige Beispiel here

+0

Kann dies verwendet werden, um mehrere Zeilen aus einer Quellzeile zu aktualisieren? – isapir

+0

Ich habe eine Follow-up-Frage gepostet, es wäre toll, wenn Sie einen Blick darauf werfen würden. Vielen Dank! http://stackoverflow.com/questions/33949195/copy-data-to-existing-rows-within-same-table-in-sql-server – isapir

0

Versuch ist es durch eine zu tun gespeicherte Prozedur, deklarieren Sie einige Variablen, laden Sie die neuen Werte in diese Variablen und aktualisieren Sie dann Ihre Tabelle.

Sollte etwas so aussehen:

CREATE PROCEDURE dbo.StoredProcedure2 

    @OldID int, 
    @NewID int 

AS 

declare @Name text, @Age int, @Subject text 

begin 

select @Name = T1.Name, @Age = T1.Age, @Subject= T1.Subject 
from Student T1 
Where T1.StudentID = @OldID 

end 

begin 

UPDATE T1 SET T1.Name = @Name, T1.Age = @Age, T1.Subject = @Subject 
FROM Student T1 
WHERE T1.StudentID = @OldID 

end 
    RETURN 
2

versuchen diese, Sie falsch Alias ​​verwenden.

UPDATE T1 SET Name = T2.Name 
, Age = T2.Age 
, Subject = T2.Subject 
FROM Student T1 
, Student T2 
WHERE T1.StudentID = @OldID 
AND T2.StudentID = @NewID 
+0

Ich habe keine andere erwähnte Abfrage in der Frage gefunden ... –

Verwandte Themen