我需要一些简单的(在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上引发了语法错误。
任何帮助将不胜感激,谢谢!
答案 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;