2012-10-11 88 views
9

Estaba intentando actualizar los mismos datos de tabla de los mismos datos de tabla.Actualice la misma tabla en SQL Server

Mi SP es como se muestra a continuación:

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 

Cuando estoy ejecuta esta consulta, no hay ningún error. Pero la actualización no está funcionando.

[aquí NO valores de las columnas comunes para comparar como T1.StudentID = T2.StudentID]

+4

¿Son '@ OldID' y' @ NewID' idénticos? – Oded

+1

Tu consulta debería funcionar (http://sqlfiddle.com/#!3/d7728/13). Quizás '@ OldID' y' @ NewID' sean idénticos a @Oded sugiere. –

+0

Sí, son idénticos. Studentid es uniqueidentifier. –

Respuesta

5

Prueba esto:

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 

El ejemplo completo es here

+0

¿Se puede utilizar esto para actualizar varias filas de una fila fuente? – isapir

+0

Publiqué una pregunta de seguimiento, sería genial si la echaras un vistazo. ¡Gracias! http://stackoverflow.com/questions/33949195/copy-data-to-existing-rows-within-same-table-in-sql-server – isapir

0

tratar de hacerlo a través de una procedimiento almacenado, declare algunas variables, cargue los nuevos valores a estas variables, luego actualice su tabla.

debería ser algo como lo siguiente:

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

intente éste, que está utilizando alias mal.

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

No encontré ninguna consulta mencionada diferente en la pregunta ... –

Cuestiones relacionadas