无法绑定SQL Server语法错误标识符

时间:2015-09-17 01:47:48

标签: sql-server

为什么这个SQL会出现语法错误以及如何解决?

UPDATE s
SET s.modified_date = l.action_date
FROM
(SELECT l.action_date, l.user_id FROM item_audit_log) l
WHERE l.user_id = s.staff_id

错误:

  

Msg 4104,Level 16,State 1,Line 4
  多部分标识符" l.action_date"无法受约束。

     

Msg 4104,Level 16,State 1,Line 4
  多部分标识符" l.user_id"无法受约束。

2 个答案:

答案 0 :(得分:2)

您收到错误是因为子查询在子查询中引用了“l”,但未在子查询中定义(它在外部作用域中定义)。但是,您不需要子查询:

UPDATE s
    SET modified_date = l.action_date
    FROM staffs s JOIN
         item_audit_log l
         ON l.user_id = s.staff_id;

这假设您有一个名为s的表。我想这应该是一个别名,也在FROM子句中定义。

答案 1 :(得分:0)

由于您的请求是“为什么”,请让我澄清一下:

  

当引用a时使用别名时,通常会发生此错误   SELECT语句中的列和未使用的别名未定义   SELECT语句的FROM子句中的任何位置。