Почему этот специфический синтаксис не работает для upserting? - PullRequest
1 голос
/ 11 октября 2010

Я использую SQL Server 2005 и хочу синхронизировать две таблицы, которые имеют одинаковое определение, но существуют в разных базах данных.MERGE INTO существует только в 2008 году, и я бы предпочел синтаксис, в котором мне не нужно указывать столбцы в ОБНОВЛЕНИИ.Поэтому я наткнулся на различные сообщения , используя следующий синтаксис:

UPDATE Destination FROM (Source INTERSECT Destination)
INSERT INTO Destination FROM (Source EXCEPT Destination)

Но когда я пытаюсь выполнить его, я получаю:

Incorrect syntax near the keyword 'FROM'.

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

Спасибо за любую подсказку!

Ответы [ 2 ]

0 голосов
/ 11 октября 2010

Согласно Books Online, для команды update требуется ключевое слово set, и оно должно предшествовать необязательному ключевому слову from. Команда insert не имеет отдельного ключевого слова from, from существует только как часть оператора select в качестве источника производной таблицы или в общем выражении таблицы.

Ссылка, на которую вы ссылаетесь, не показывает допустимый синтаксис SQL Server 2005.

«Как я могу заставить это работать? У меня есть несколько таблиц, которые мне нужно синхронизировать, и я не хочу указывать все столбцы в каждом утверждении».

Для update необходимо указать все столбцы. Для insert, если источник и пункт назначения имеют одно и то же struture, вы можете использовать insert into TARGTET_TABLE_NAME select * from SOURCE_TABLE_NAME НО , что не рекомендуется для производственного кода, если при изменении источника или пункта назначения оператор прервется. Если источник и место назначения различаются, необходимо указать столбцы как минимум на одной стороне вставки.

0 голосов
/ 11 октября 2010

Извините, если это не отвечает на ваш вопрос, но если предположить, что вся причина этого в экономии времени, вы не можете просто щелкнуть правой кнопкой мыши по исходной таблице и сгенерировать скрипт INSERT, затем - щелкните по таблице назначения и сгенерируйте пустой скрипт SELECT, затем объедините два? Это будет работать только в том случае, если в вашей среде приемлемо уничтожение и заполнение.

...