paul_vin Ответов: 2

Многосоставный идентификатор "dbo.tbl_insert_data.id-не может быть связан.


У меня есть две таблицы на двух серверах с одинаковым определением.
каждый день некоторые записи вводятся в таблицы server1.
теперь об этой записи на один день. Я хочу копировать данные на второй серверный стол за каждый день.

чтобы установить соединение между двумя серверами, я создал link server.
Я создал запрос для копирования всех данных с одного сервера на другой, который работает нормально (следующий запрос)
INSERT INTO [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data]
SELECT * from  [server1].[ABC_Test_Link_Vin].[dbo].[tbl_Insert_Data]


но теперь я хочу создать запрос для копирования однодневных данных с сервера а на сервер В.

для этого я написал запрос следующим образом.

INSERT INTO [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data]
SELECT * from  [server1].[ABC_Test_Link_Vin].[dbo].[tbl_Insert_Data]
where [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data].ID
 not in (select I.ID from [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data] as i inner join [server1].[ABC_Test_Link_Vin].[dbo].[tbl_Insert_Data] as tblins on I.ID=tblins.ID)


но это дает ошибку как
The multi-part identifier "server2.RemedyIntegration.dbo.tbl_Insert_Data.ID" could not be bound.


Что я уже пробовал:

INSERT INTO [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data]
SELECT * from  [server1].[ABC_Test_Link_Vin].[dbo].[tbl_Insert_Data]
where [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data].ID
 not in (select I.ID from [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data] as i inner join [server1].[ABC_Test_Link_Vin].[dbo].[tbl_Insert_Data] as tblins on I.ID=tblins.ID)


пожалуйста, предложите, каково будет мое состояние

2 Ответов

Рейтинг:
13

Richard Deeming

Вы пытаетесь использовать идентификатор из пяти частей для столбца, который не будет работать. Попробуйте добавить псевдоним в таблицу.

Кроме того, INNER JOIN в NOT IN вложенный запрос не имеет для меня никакого смысла. Вы уже выбрали из server1, поэтому вам не нужно снова присоединяться к нему во вложенном запросе.

INSERT INTO [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data]
SELECT * FROM [server1].[ABC_Test_Link_Vin].[dbo].[tbl_Insert_Data] As S
WHERE S.ID NOT IN 
(
    SELECT I.ID 
    FROM [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data] As I 
)
Или:
INSERT INTO [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data]
SELECT * FROM [server1].[ABC_Test_Link_Vin].[dbo].[tbl_Insert_Data] As S
WHERE NOT EXISTS
(
    SELECT I.ID 
    FROM [server2].[RemedyIntegration].[dbo].[tbl_Insert_Data] As I 
    WHERE I.ID = S.ID
)


Рейтинг:
0

phil.o

Дважды проверьте название столбцов. Вы также можете попытаться поместить имя столбца в квадратные скобки ([ID]).

sql - что такое "многосоставный идентификатор" и почему он не может быть привязан? - переполнение стека[^]