Как скопировать данные таблицы с одного SQL-сервера на другой SQL-сервер?

Как я могу скопировать данные с одного SQL-сервера на другой. Я пытаюсь скопировать данные таблицы с сервера 1 на сервер 2. В server1.table1 данные из таблицы добавляются/удаляются, например, если у меня есть 10 строк и добавляется еще пять строк, через некоторое время первые десять удаляются. С другой стороны, я копирую на другой сервер server2.table2. Я использую функцию EXCEPT для копирования int data2 is server2. Мой следующий код.

Для Сервера1.

CREATE TABLE database1.dbo.Data1
   (MachineId bigint IDENTITY(1,1) PRIMARY KEY,
   MachineName varchar(50) NOT NULL,
    ProgramName varchar(255) NOT NULL,
   );
GO

Для сервера2.

CREATE TABLE database2.dbo.Data2
       (MachineId bigint IDENTITY(1,1) PRIMARY KEY,
       MachineName varchar(50) NOT NULL,
        ProgramName varchar(255) NOT NULL,
       );
GO

 SET IDENTITY_INSERT [Server2].[database2].[dbo].[Data2] ON 
GO
Insert into [Server2].[database2].[dbo].[Data2] SELECT * from [Server1].[database1].[dbo].[Data1] EXCEPT SELECT * from [Server2].[database2].[dbo].[Data2]

Но я получаю сообщение об ошибке:

Явное значение для столбца идентификаторов в таблице «[Server2].[database2].[dbo].[Data2]» может быть указано только в том случае, если используется список столбцов и IDENTITY_INSERT включен.

Но я использовал вставку Identity.


person user9630935    schedule 08.06.2018    source источник
comment
@B3S: любые предложения, как я могу это сделать, моя таблица Data1 на server1 обновляется, а также некоторые данные удаляются. Но мне нужны все данные на мой сервер2, таблица Data2. Поэтому я использовал ИСКЛЮЧАЯ. Но проблема заключается в столбце Identity, потому что в случае, если в моем server1, table - Data1, несколько данных удаляются или когда добавляются новые данные, они начинаются, например, с идентификатором -11. Мне нужно скопировать последние данные, добавленные в Data1 моего server1, на server2.   -  person user9630935    schedule 08.06.2018


Ответы (1)


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

INSERT INTO [Server2].[database2].[dbo].[Data2] (MachineId, MachineName, ProgramName)
SELECT * FROM [Server1].[database1].[dbo].[Data1] 
EXCEPT 
SELECT * FROM [Server2].[database2].[dbo].[Data2]

Примечание. Это решение предназначено только для вашего сообщения об ошибке, и я надеюсь, что остальная часть запроса будет работать в соответствии с вашими ожиданиями.

person Susang    schedule 08.06.2018
comment
я получаю сообщение об ошибке Невозможно вставить явное значение для столбца идентификаторов в таблице «Данные2», когда для параметра IDENTITY_INSERT установлено значение OFF. - person user9630935; 08.06.2018
comment
эта строка также нужна перед SET IDENTITY_INSERT [Server2].[database2].[dbo].[Data2] ON и, пожалуйста, сделайте OFF наконец - person Susang; 08.06.2018
comment
да, это сработало. Спасибо! Но теперь у меня проблема с копированием сервера на сервер. Не удается найти объект Server2.database2.dbo.Data2, так как он не существует или у вас нет разрешений. Проверил с разрешениями, вроде все нормально. это как-то связано с синтаксисом, [Server2].[database2].[dbo].[Data2] - person user9630935; 08.06.2018
comment
Вы должны create linked server выполнить эту операцию, поэтому, если вы уже сделали это, это должно быть проблемой разрешения. Попробуйте это с полностью привилегированным пользователем только для тестирования, если все еще не работает, вы можете задать эту проблему в отдельном вопросе. Ссылка на связанный сервер docs.microsoft.com/en-us/sql/relational-databases/ - person Susang; 08.06.2018
comment
Спасибо @Susang. Но я использую стороннее программное обеспечение для подключения к базе данных сервера Sql, которым является rdbDsService, из-за которого я не могу контролировать трафик. Теперь я сомневаюсь, что мне все еще нужно создавать сервер ссылок. ? - person user9630935; 14.06.2018