У меня есть пара связанных SQL-серверов: ServerA и ServerB. Я хочу написать простой оператор INSERT INTO SELECT, который скопирует строку из базы данных ServerA в базу данных ServerB. База данных ServerB была скопирована непосредственно из ServerA, и поэтому они должны иметь точно такую же базовую структуру (имена же колонки и т.д.)SQL INSERT sp_cursor Ошибка
Проблема заключается в том, что, когда я пытаюсь выполнить следующую инструкцию:
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 правильно работает, когда я явно укажу, какие столбцы копировать, но не тогда, когда я скажу ему копировать все, используя «*»? Тогда мой второй вопрос: как я могу исправить проблему?
Обычно это указывает на то, что столбец по ошибке является столбцом Identity. С таким именем, как «Value», это кажется менее вероятным, но проверьте это и посмотрите, является ли Value Identity. Кроме того, дважды проверьте, действительно ли столбцы идентичны на обоих серверах. (имя, тип данных и порядок.) – DeadZone
В таблице нет столбца с именем «Значение». Кроме того, что было бы самым быстрым способом проверить, что столбцы, по сути, полностью идентичны? (Для рассматриваемой таблицы имеется более 1000 столбцов, поэтому это займет очень много времени.) – Karasu
Проверьте [это] (http://www.kepware.com/KEP_KB/?solution=/_ui/selfservice/pkb/PublicKnowledgeSolution/d? & id = 50140000000SUKxCsY). От чтения этого я думаю, что это связано с тем, что существует более 1000 столбцов и то, как INSERT INTO ... SELECT работает под капотом, вы нарушаете максимальную длину символа. Я бы предложил это в качестве ответа, если бы у меня была лучшая документация, чтобы поддержать его, а не просто теорию. – LDMJoe