sql-server - SQL Server 更新查询中的语法不正确
问题描述
以下更新查询有什么问题。错误信息是
“SD”附近的语法不正确。
代码:
UPDATE T_EmpSelf_Details SD, T_TravelDetails TD
SET SD.Host_Country = TD.New_Host_Country
WHERE
SD.EL_Year = TD.EL_Year
AND SD.Emp_ID = TD.EmpId
AND SD.Staff_number IN ('00002080', '00002320');
解决方案
没有理由让事情变得过于复杂......不需要 CTE、派生表或子查询......
UPDATE SD SET
SD.Host_Country = TD.New_Host_Country
FROM
T_EmpSelf_Details SD
JOIN T_TravelDetails TD
ON SD.EL_Year = TD.EL_Year
AND SD.Emp_ID = TD.EmpId
WHERE
SD.Staff_number IN ('00002080', '00002320');
此语法还有一个额外的好处,即允许您将查询编写为 SELECT,验证您的谓词是否正确,然后轻松将其转换为 UPDATE...
/* begin by writing it as a SELECT... */
SELECT
SD.Host_Country,
TD.New_Host_Country
FROM
T_EmpSelf_Details SD
JOIN T_TravelDetails TD
ON SD.EL_Year = TD.EL_Year
AND SD.Emp_ID = TD.EmpId
WHERE
SD.Staff_number IN ('00002080', '00002320');
/* when you're satisfied that the correct rows & values are in scope. convet it to an UPDATE...
-- begin by writing it as a SELECT... */
--SELECT
-- SD.Host_Country,
-- TD.New_Host_Country
UPDATE SD SET
SD.Host_Country = TD.New_Host_Country
FROM
T_EmpSelf_Details SD
JOIN T_TravelDetails TD
ON SD.EL_Year = TD.EL_Year
AND SD.Emp_ID = TD.EmpId
WHERE
SD.Staff_number IN ('00002080', '00002320');
推荐阅读
- java - 我可以使用单个驱动程序在 Selenium (Java) 中并行运行多个测试吗?
- javascript - w3.js 中的信息阅读困难
- html - 如何使用 CSS 使文本输入框变大?
- javascript - Javascript正则表达式至少匹配任何字符串中的一个特殊字符
- r - 更改堆积条形图的颜色,但保持每个类的堆栈按递增顺序排列
- ios - 输入设置值时如何删除用户意外输入的空格(用户默认值)
- java - 从完成服务中杀死线程?
- javascript - 在角度java脚本中过滤嵌套的对象数组
- ios - CoreBluetooth macOS 应用,连接 iPhone
- python - OpenGL:球体减慢帧速率