2012-10-11 73 views
9

我试图从相同的表数据更新相同的表数据。更新SQL Server中的同一个表

我的SP如下图所示:

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 

当我执行这个查询,没有错误。但更新不起作用。

[这里没有共同的列值比较喜欢T1.StudentID = T2.StudentID]

+4

“@ OldID”和“@ NewID”是否相同? – Oded

+1

你的查询应该工作(http://sqlfiddle.com/#!3/d7728/13)。 @Oded建议,也许'@ OldID'和'@ NewID'是相同的。 –

+0

是的,它们是相同的。 Studentid是唯一标识符。 –

回答

5

试试这个:

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 

完整的例子是here

+0

这可以用来从一个源行更新多行吗? – isapir

+0

我发布了一个后续问题,如果你看一看,会很棒。谢谢! http://stackoverflow.com/questions/33949195/copy-data-to-existing-rows-within-same-table-in-sql-server – isapir

0

尝试通过做存储过程,声明一些变量,将新值加载到这些变量,然后更新您的表。

应该是这个样子的是:

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

试试这个,你正在使用错误的别名。

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

我没有在问题中发现任何不同提及的查询... –

相关问题