У меня есть пара связанных SQL-серверов: ServerA и ServerB. Я хочу написать простую инструкцию INSERT INTO SELECT, которая скопирует строку из базы данных ServerA в базу данных ServerB. База данных ServerB была скопирована непосредственно с ServerA, поэтому они должны иметь точно такую же базовую структуру (одинаковые имена столбцов и т. д.).
Проблема в том, что когда я пытаюсь выполнить следующий оператор:
INSERT INTO [ServerB].[data_collection].[dbo].[table1]
SELECT * FROM [ServerA].[data_collection].[dbo].[table1]
Я получаю следующую ошибку:
Msg 16902, Level 16, State 48, Line 1
sp_cursor: The value of the parameter 'value' is invalid.
С другой стороны, если я попытаюсь выполнить следующий оператор:
INSERT INTO [ServerB].[data_collection].[dbo].[table1] (Time)
SELECT Time FROM [ServerA].[data_collection].[dbo].[table1]
Оператор работает просто отлично, и код выполняется, как и ожидалось. Приведенный выше оператор выполняется просто отлично, независимо от того, какие или сколько таблиц я указал для вставки.
Итак, мой вопрос здесь заключается в том, почему мой оператор INSERT INTO SELECT работает правильно, когда я явно указываю, какие столбцы копировать, но не когда я говорю ему копировать все, используя «*»? Мой второй вопрос тогда будет: как мне решить проблему?