скопировать Ms доступ к одной большой таблице на сервере Sql две маленькие таблицы - PullRequest
1 голос
/ 29 августа 2009

У меня одна большая таблица в Ms access 2k daabase, и мне нужен способ скопировать эту таблицу, а затем заполнить две уже готовые таблицы на сервере sql.

Я могу использовать инструмент миграции, но есть ли какой-нибудь способ, которым мы можем сделать это с помощью доступа Ms, например формы, которая выполняет хранимую процедуру или соединение ODBC.

я имею в виду создание формы с доступом ms, в которой должна быть кнопка обзора для выбора моего mdb-файла с доступом к источнику, а затем еще одна кнопка для обработки [при нажатии на таблицу, указанную выше кнопкой обзора, следует импортировать на сервер sql ] ?? Это возможно? пожалуйста, дайте мне некоторые детали

Заранее спасибо

Ответы [ 5 ]

1 голос
/ 29 августа 2009

Вы можете установить ссылки на таблицы на две таблицы SQL-сервера из MS Access.

Тогда вы можете создать запрос, который заполняет каждую таблицу из исходной таблицы.

0 голосов
/ 29 августа 2009

Я подозреваю, что запуск INSERT из Access со связанными таблицами ODBC будет очень медленным, поскольку Jet / ACE имеет тенденцию разбивать каждую строку на отдельный оператор INSERT. Jet / ACE является хорошим гражданским пользователем многопользовательской серверной базы данных, поскольку это позволяет серверу сериализовать операции, сгенерированные несколькими пользователями, и чередовать обновления других с массовым обновлением. Но это ужасно медленно для больших наборов данных, и когда вы делаете что-то вроде себя, которое инициализирует пустой набор данных, это означает, что слишком"гражданской ответственности".

Возможно, вы захотите переименовать существующую таблицу и вместо этого экспортировать таблицу доступа до SQL Server через ODBC DSN. Если DSN уже определен, вы просто выбираете EXPORT в меню FILE в Access, выбираете DSN в качестве пункта назначения, а Jet / ACE позаботится об остальном, создав таблицу на сервере и загрузив все данные. Это очень эффективно (то есть, не будет делать это по одной записи за раз), поскольку Jet / ACE знает, что заполняет таблицу, которой раньше не было.

Теперь, результат может быть не совсем тем, что вам нравится (Jet / ACE может не получить все типы данных правильно из-за аспектов перевода драйверов ODBC, но типы данных должны быть совместимы, если точные типы данных являются самыми строгими по желанию), но тогда у вас будет полный набор данных в базе данных SQL Server, а затем вы сможете добавить его из одной таблицы SQL Server в правильно структурированную.

Вы хотели бы выполнить проверку данных, чтобы убедиться, что никакие данные не были потеряны или неправильно преобразованы (примером этого может быть текстовое поле почтового индекса, преобразуемое в число - это фактически никогда не произойдет, но это то, что вы хотели бы проверить), но я думаю, что для набора данных объемом 500 МБ, когда у вас нет хороших инструментов для увеличения размера (потому что версии Access не могут идти в ногу с последними версиями SQL Server), это может сделать работу более эффективно с меньшим количеством работы.

0 голосов
/ 29 августа 2009

Вы можете создать проект доступа (.adp) к серверу Sql, а затем использовать меню «Файл»> «Импорт» в MS Access (в формате .adp), чтобы импортировать свою таблицу в (.adp) и, следовательно, Sql Server.

Затем просто используйте простые хранимые процедуры SELECT INTO для заполнения таблиц на Sql Server из импортированной таблицы.

0 голосов
/ 29 августа 2009

Ниже приведен код, который можно использовать для создания ссылки DSNless на таблицу в базе данных SQL Server из Access. Это работает, по крайней мере, в Access 2003. После запуска этого кода таблицами SQL можно манипулировать напрямую, как и любой другой таблице Access.

'Name     :   AttachDSNLessTable
'Purpose  :   Create a linked table to SQL Server without using a DSN
'Parameters
'     stLocalTableName: Name of the table that you are creating in the current     database
'     stRemoteTableName: Name of the table that you are linking to on the SQL Server database
'     stServer: Name of the SQL Server that you are linking to
'     stDatabase: Name of the SQL Server database that you are linking to
'     stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection
'     stPassword: SQL Server user password
Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, _
                        stDatabase As String, _
                        Optional stUsername As String, Optional stPassword As String)

    On Error GoTo AttachDSNLessTable_Err
    Dim td As TableDef

    For Each td In CurrentDb.TableDefs
        If td.Name = stLocalTableName Then
            CurrentDb.TableDefs.Delete stLocalTableName
        End If
    Next

    If Len(stUsername) = 0 Then
        'Use trusted authentication if stUsername is not supplied.
        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
    Else
        'WARNING: This will save the username and the password with the linked table information.
        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword
    End If
    Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
    CurrentDb.TableDefs.Append td
    AttachDSNLessTable = True
    Exit Function

AttachDSNLessTable_Err:

     AttachDSNLessTable = False
    MsgBox "Error while trying to link to SQL Server on " & stServer & ": " & Err.Description

End Function
0 голосов
/ 29 августа 2009

У меня одна большая таблица в базе данных Ms access 2k, и мне нужен способ скопировать эту таблицу, а затем заполнить две уже готовые таблицы на сервере SQL.

Насколько большой "большой"? SQL Server должен иметь возможность обрабатывать любую отдельную таблицу, которую вы когда-либо храните в Access. Я не думаю, что терабайт данных был бы невозможен.

Вы можете использовать Microsoft SSIS . Или просто выведите CSV-представление базы данных Access и импортируйте ее в SQL Server. Или upsize Доступ к SQL Server.

Ваш вопрос сбивает меня с толку. Являются ли две "уже готовые" таблицы в дополнение к этой большой таблице с другими данными, которые будут храниться в них? Я, конечно, надеюсь, что они не имеют такой же макет, как «большая» таблица в Access (нарушая первую нормальную форму), и призываю вас разделить данные из Access между ними, полагая, что это какое-то улучшение.

...