如果sql server中的语句无法识别临时表字段?

时间:2013-01-03 08:38:48

标签: sql sql-server sql-server-2008-r2

我有这段代码:

CREATE TABLE #CategoriesTable
(
   CategoryId INT,
   HasAssessment BIT,
   IsScorm BIT, 
   IsExternal BIT,
   ExternalLink varchar(256), 
   SingleArtifact BIT, 
   ScormModuleUrl varchar(256),
   WindowHeight varchar(256), 
   WindowWidth varchar(256),
   DateTimeCreated date,
   HintText nvarchar(256),
   UserId INT
)

select ct.HasAssessment from #CategoriesTable ct
  where UserId = @UserId  
IF (ct.HasAssessment = 1)
BEGIN
  UPDATE #CategoriesTable SET HintText = 'With Assessment'
END    
else
BEGIN
 UPDATE #CategoriesTable SET HintText = 'With No Assessment'    
END      

SELECT *
  FROM #CategoriesTable

我收到以下错误:无法绑定多部分标识符“ct.HasAssessment”。?

1 个答案:

答案 0 :(得分:1)

您不需要IF声明。更新可以完全通过标准SQL完成。

UPDATE #CategoriesTable
SET    HintText = CASE WHEN HasAssessment = 1 
                       THEN 'With Assessment' 
                       ELSE 'With No Assessment' 
                  END 
WHERE  UserID = @UserID

如果您确实希望使用IF语句(不建议),则需要声明一个变量来保存select语句的结果并在{{{{{ 1}}语句。

请注意,在这种情况下,select语句应该只返回一个结果,这是在SQL中完全执行更新的另一个原因。