SQL Server: синтаксическая ошибка при запуске INSERT INTO, где существует и присоединиться - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь скопировать данные из одной таблицы в другую, если этих строк еще нет в таблице.Кроме того, я хочу добавить значение из столбца в третьей таблице на основе значения столбца в исходной таблице, которая будет скопирована.

Я унаследовал две таблицы, одну из которых нужно сделать избыточной (поскольку база данных будет больше не функционировать), и, следовательно, информацию необходимо перенести в другую таблицу, которая не идентична по дизайну (однакотипы данных есть).

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 Ответ

1 голос
/ 16 мая 2019

Догадываюсь, но я подозреваю, что проблема в том, что вы алиасуете таблицу 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...