如何从select语句中传递更新中的行值?

时间:2015-11-09 16:51:29

标签: sql-server select sql-update

我需要一些简单的(在PostgreSQL中简单,但我需要在SQL Server 2008中)从select语句更新。我不知道如何传递"价值观"从行作为变量到from子句中的select语句。这就是我所做的。

DECLARE @OldAnswerValue INT = 7;
DECLARE @Type INT =3;
SELECT A.Id as NewAnswer
FROM tblEvaluationAnswers A
WHERE A.AnswerValue=
    CASE @OldAnswerValue
    WHEN 0 THEN 1
    WHEN 1 THEN 2
    ...
    WHEN 9 THEN 5
    END
AND AnswerType=@Type

我的更新看起来像

UPDATE transPersonEvaluation
SET UserAnswer=PEA.NewAnswer
FROM ( ) as PEA --here the select statement inside from

但我不知道如何将@OldAnswerValue和@Type作为参数传递给from子句。这个值是从我正在更新的transPersonEvaluation的每一行中提取的。 在PostgreSQL中我认为它就像

UPDATE transPersonEvaluation PE
SET UserAnswer=PEA.NewAnswer
FROM (
    SELECT A.Id as NewAnswer
    FROM tblEvaluationAnswers A ... where A.AnswerType=PE.AnswerType) as PEA;

但它在sql server 2008上引发了语法错误。

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

在sql server中你的查询看起来像这样。

UPDATE PE
SET PE.UserAnswer=PEA.NewAnswer
FROM transPersonEvaluation PE
JOIN 
(
    SELECT A.Id as NewAnswer
    FROM tblEvaluationAnswers A ... ) as PEA ON PEA.AnswerType = PE.AnswerType;