2012-10-11 20 views
9

Próbowałem zaktualizować te same dane tabeli z tych samych danych tabeli.Zaktualizuj tę samą tabelę w SQL Server

Moja SP jest tak jak pokazano poniżej:

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 

Kiedy jestem wykonywanie kwerendy, nie ma błędu. Ale aktualizacja nie działa.

[tutaj ma wspólnych wartości kolumny porównać jak T1.StudentID = T2.StudentID]

+4

Czy '@ OldID' i' @ NewID' są identyczne? – Oded

+1

Twoje zapytanie powinno zadziałać (http://sqlfiddle.com/#!3/d7728/13). Być może '@ OldID' i' @ NewID' są identyczne jak @Wyświetlane sugestie. –

+0

Tak, są identyczne. Studentid jest unikalnym identyfikatorem. –

Odpowiedz

5

Spróbuj tego:

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 

Pełne przykładem jest here

+0

Czy można to wykorzystać do aktualizacji wielu wierszy z jednego wiersza źródłowego? – isapir

+0

Wysłałem pytanie uzupełniające, byłoby świetnie, gdybyś rzucił okiem. Dzięki! http://stackoverflow.com/questions/33949195/copy-data-to-existing-rows-within-same-table-in-sql-server – isapir

0

spróbować zrobić go przez procedura składowana, zadeklaruj niektóre zmienne, załaduj nowe wartości do tych zmiennych, a następnie zaktualizuj tabelę.

powinien wyglądać mniej więcej tak:

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

Spróbuj tego, używasz złego alias.

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

Nie znalazłem w pytaniu żadnego innego wzmiankowanego zapytania ... –

Powiązane problemy