Запросы MS Access 2007 не работают на SQL Server 2008 - PullRequest
3 голосов
/ 19 марта 2012

Я разрабатываю приложение в C # VS 2010 последние 4 месяца.Я использовал MS Access 2007 для успешного хранения почти 20 таблиц.

Сегодня я понял, что моя база данных не может обрабатываться последовательно с помощью MS Access 2007. Поэтому я решил перейти на SQL Server 2008 R2 Express с мастером Upsizing иэто работало действительно замечательно!

Однако, когда я пытался запустить различные опции моего уже хорошо разработанного приложения, оно продолжало выдавать ошибку каждый раз, когда запрос запускался на SQL Server.

Я понялчто многие компоненты SQL, поддерживаемые MS Access, не поддерживаются MS SQL Server

Например: запрос с датой для представления формата даты, когда мы используем «#», SQL Server 2008 не распознает его.

Кроме того, для значения Bool MS Access сохраняет его как True и False, где SQL Server использует 0.

Все эти запросы отлично работали с Access 07

уверен, что должен быть какой-то метод, чтобы SQL Server мог понимать запросы MS Access.

Или мне придется редактировать все мое приложение ??Это будет так же хорошо, как копать шахту для получения золота ..

Я изменил все объекты доступа к данным, такие как читатель, адаптер, команда, соединение с объектами данных SQL, используя System.Data.SqlClient.

Так, это не проблема.

Пожалуйста, помогите мне как можно скорее.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 19 марта 2012

Вы не можете заставить SQL Server выполнять запросы MS Access.Эти запросы необходимо будет переписать, чтобы использовать T-SQL вместо языка запросов, который использует MS Access.

Я чувствую вашу боль, мне просто пришлось переписать большое приложение MS Access (более 1 тыс. Запросов), которое необходимо было воссоздать для использования в SQL Server.

Будут некоторые запросы, которые могут быть перенесены напрямую, но, как вы заметили, запросы с датой, и даже некоторые из агрегатных функций (First () и т. Д.) Не используются в SQL Server, и этизапросы нужно будет изменить.

Вот ссылка с некоторой информацией о преобразовании Access в SQL

Преобразование запросов доступа в SQL Server

2 голосов
/ 20 марта 2012

Вы правы, что в большинстве случаев вы не можете просто взять SQL-запрос из Access и запустить его в SQL Server.Это может работать для очень простых запросов, но обычно вам нужно настроить их.

Я бы сделал несколько шагов:

  1. Извлечение ваших запросов (которые я предполагаюв вашем коде), и заново создайте их в базе данных Access.Убедитесь, что они работают как обычные запросы Access.
    (например, вы можете просто добавить некоторый код в ваше приложение для печати всех запросов в файлы, чтобы вам не приходилось связываться с параметрами, а затем просто скопировать / вставить их в свой файл).Access DB).
    Суть в том, чтобы просто иметь рабочие запросы в Access.

  2. Использовать SSMA от Microsoft , чтобы помочь вам переместить ваши запросы на SQL Server,Он хорошо переводит их в T-SQL.
    Возможно, вам все еще придется конвертировать некоторые хлопотные запросы вручную, но их не должно быть так много, и обычно конвертация не сложна.

  3. После преобразования в T-SQL просто повторно внедрите эти рабочие запросы в свой код или оставьте сложные запросы в SQL Server в виде представлений (что обычно происходит быстрее, поскольку SQL Server уже создал свой план выполнения).вместо того, чтобы ваше приложение отправляло необработанный SQL, который должен анализировать сервер).

  4. Как вы указали, могут быть некоторые проблемы, если ваши поля используют некоторые функции, которые не пересекаютсяПерейдите к SQL Server должным образом.
    Просмотрите таблицы в Access и выполните некоторую очистку, прежде чем пытаться преобразовать:

    • Для логических полей:
      Убедитесь, что для их значений по умолчанию установлено значение 0 или1 (они не должны быть пустыми).
    • Обязательные поля должны быть ненулевыми:
      Убедитесь, что все поля, которые вы указали как 'Обязательные', не имеют значенияв любых значениях NULL в своих данных.
    • Уникальные индексы не могут игнорировать Null:
      Убедитесь, что для ваших индексов не заданы значения 'Unique' и 'Ignore null'.
    • Все таблицыдолжны иметь чистые первичные ключи:
      Убедитесь, что у всех ваших таблиц есть уникальный первичный ключ, в данных которого нет значений Null.
...