sql-server - SQL Server:运行 INSERT INTO where exists and join 时出现语法错误
问题描述
如果这些行不在表中,我正在尝试将数据从一个表复制到另一个表中。此外,我想根据要复制的原始表中列的值添加第三个表中列的值。
我继承了两个表,其中一个将被冗余(因为数据库将失效),因此需要将信息移动到另一个设计不同的表(但是数据类型是)。
INSERT INTO [AMData].[dbo].[AttendanceRecord] A ([TypeID], [Date], [EmpID], [EhrID], [SickReason], [AbsID])
SELECT
T.[ID], F.[EHrDate], F.[EHrEmpID], F.[EHrID], F.[EHRUserComment], F.[AbsID]
FROM
[Focus].[dbo].[AllAbsence] F
INNER JOIN
[AMData].[dbo].[AttendanceTypes] T ON F.[AbsID] = T.[FocusID]
WHERE
NOT EXISTS (SELECT *
FROM [AMData].[dbo].[AttendanceRecord] A, [Focus].[dbo].[AllAbsence] F
WHERE A.[EhrID] = F.[EHrID]
AND F.[EHrDate] BETWEEN '2018/01/01' AND '2018/12/01'
AND F.[AbsID] <> 0
AND F.[AbsID] <> 2);
尝试运行代码时出现语法错误。我不习惯运行插入代码,因此可能显然是错误的。
解决方案
一个猜测,但我怀疑问题是您正在为 table 别名AttendanceRecord
。您不能在INSERT
子句中为表设置别名。该错误实际上是在告诉您:
Ln:1 Col:47 - 'A' 附近的语法不正确
删除A
,这将起作用(好吧,下面的 SQL 没有语法错误,所以我松散地使用“工作”这个词):
INSERT INTO [AMData].[dbo].[AttendanceRecord] ([TypeID],
[Date],
[EmpID],
[EhrID],
[SickReason],
[AbsID])
SELECT T.[ID],
F.[EHrDate],
F.[EHrEmpID],
F.[EHrID],
F.[EHRUserComment],
F.[AbsID]
FROM [Focus].[dbo].[AllAbsence] AS F
INNER JOIN [AMData].[dbo].[AttendanceTypes] AS T ON F.[AbsID] = T.[FocusID]
WHERE NOT EXISTS (SELECT *
FROM [AMData].[dbo].[AttendanceRecord] AS A,
[Focus].[dbo].[AllAbsence] AS F
WHERE A.[EhrID] = F.[EHrID]
AND F.[EHrDate] BETWEEN '2018/01/01' AND '2018/12/01'
AND F.[AbsID] <> 0
AND F.[AbsID] <> 2);
推荐阅读
- rust - Rust 文档测试未运行
- mysql - 为什么数据库的第 8 章第 65 题中的同一本书的表格总是有 4 个结果?
- python - 根据其他 col 值填充和移动 col 的值
- python - 我的函数没有正确评估某些值
- google-apps-script - 显示错误的帐户
- bash - 使用 kubectl exec 获取语法错误,因为无法使用 TTY
- python - 如何计算列的唯一值并将每个值附加到字典中?
- python - 获取熊猫数据框中列的先前非 NaN 值以进行计算
- typescript - 使用 ts-loader 时解决类型依赖的问题,但不使用 tsc
- reactjs - 在我的 react-navigation/material-bottom-tabs 上添加通知计数器徽章