SQL Server:在存在并加入的地方运行INSERT INTO时发生语法错误

时间:2019-05-16 10:33:50

标签: sql-server

如果表中还没有这些行,我正在尝试将数据从一个表复制到另一表中。另外,我想基于要复制的原始表中的列的值,添加第三张表中的列的值。

我继承了两个表,其中一个表将变得多余(因为将要使数据库失效),因此需要将信息移到设计上不相同的另一个表中(但是数据类型是这样) 。

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);

尝试运行代码时出现语法错误。我不习惯运行插入代码,因此很可能显然是错误的。

1 个答案:

答案 0 :(得分:1)

一个猜测,但是我怀疑问题是您在别名表AttendanceRecord。您不能在INSERT子句中为表加上别名。该错误实际上是在告诉您:

  

Ln:1列:47-'A'附近的语法不正确

删除A,这将起作用(嗯,下面的SQL没有语法错误,所以我宽松地使用“ work”一词):

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);