использование синонимов sql server 2005 для таблицы приводит к ошибкам динамической генерации запросов - PullRequest
1 голос
/ 24 декабря 2009

У меня есть ситуация, когда у меня есть каталог на сервере A и одноименный каталог на сервере B. Я использую синонимы на сервере B, так что некоторые таблицы на самом деле просто проходят через сервер А.

Так, что вызов select * из ServerB.Table фактически возвращает данные из ServerA.Table прозрачно. Кажется, что это работает нормально, когда я делаю выбор, и также работает хорошо, если я вручную вставляю сценарий tsql, однако, когда я использую адаптер ADO.NET, он выдает мне сообщение о том, что «Динамическое генерирование SQL не поддерживается для SelectCommand, который не возвращает информацию о базовой таблице. " Это обычно означает, что при возврате данных информация первичного ключа недоступна. Есть ли способ обойти это? (Для меня желательно иметь возможность продолжать использовать синоним, поскольку на самом деле это не вариант, чтобы исключить его использование).

Я знаю, что существует столбец «ID», который всегда является первичным ключом, и при необходимости я могу жестко закодировать информацию о первичном ключе обратно в адаптер ado.net / datatable, если требуется.

Спасибо!

1 Ответ

1 голос
/ 25 декабря 2009

Вы используете SQLCommandBuilder для получения SQL для операций модификации данных.

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

Вы должны предоставить свои UpdateCommand и DeleteCommand для адаптера данных.

См. эту ссылку для кода.

...