Можно ли записывать данные в виде операторов Insert из пакета служб SSIS?

SQL Server 2008 предоставляет возможность создавать сценарии для данных в виде инструкций Insert с помощью параметра Generate Scripts в Management Studio. Можно ли получить доступ к тем же функциям из пакета служб SSIS?

Вот что я пытаюсь сделать:

У меня есть запланированное задание, которое запускается каждую ночь и создает сценарии для всей схемы и данных из базы данных SQL Server 2008. Затем он использует сценарий для создания базы данных mirror copy SQLCE 3.5. Я использовал нараяну Вьяса Кондредди sp_generate_inserts для этого, но у нее есть проблемы с несколькими типами данных, а также проблемы с обработкой более 4000 столбцов (пережитки SQL Server 2000 дней).

Похоже, что функция Script Data могла бы решить мои проблемы, если бы я только мог ее автоматизировать.

Какие-либо предложения?


person Community    schedule 11.05.2010    source источник
comment
Казалось, что SMO может спасти положение, но в электронной документации для методов Scripter.Script и Scripter.ScriptWithList указано, что этот метод выдает исключение, если он вызывается, когда для свойства ScriptData задано значение True. Это предотвратит запись всего набора данных в объект StringCollection. Таким образом, хотя вы можете делать много интересных вещей с помощью SMO, приятная функциональность Script Data, которую вы получаете через Management Studio, здесь ограничена.   -  person    schedule 11.05.2010
comment
Возможно, SMO еще спасет положение. Вы должны использовать метод Scripter.EnumScript вместо Scripter.Script.   -  person    schedule 11.05.2010


Ответы (2)


Используйте мою утилиту командной строки Export2SqlCE, которая записывает как данные, так и схему в SQL Compact, совместимый сценарий. SMO не поддерживает синтаксис SQL Compact и преобразование типов данных.

person ErikEJ    schedule 11.05.2010
comment
Я только что попробовал утилиту Export2SqlCE из командной строки, и она отлично работает. Я уже написал код для преобразования схемы SQL Server в схему SQLCE. Жаль, что я не знал об этой утилите до того, как начал накатывать свою собственную. - person ; 12.05.2010

С помощью метода SMO Scripter.EnumScript можно автоматизировать создание сценариев для всех данных таблицы в виде операторов Insert. Вот код, который я придумал.

Using conn As New SqlConnection(SqlServerConnectionString)
    Dim smoConn As New ServerConnection(conn)
    Dim smoServer As New Server(smoConn)
    Dim smoDatabase As Database = smoServer.Databases(smoConn.DatabaseName)
    Dim smoTables As SqlSmoObject() = New SqlSmoObject(2) {smoDatabase.Tables("Employee"), _
                                                           smoDatabase.Tables("Company"), _
                                                           smoDatabase.Tables("Job")}

    Dim smoScripter As New Scripter(smoServer)
    With smoScripter.Options
        .ScriptData = True
        .ScriptSchema = False
        .IncludeDatabaseContext = False
        .EnforceScriptingOptions = True
        .SchemaQualify = False
    End With

    Dim outputScript As New StringBuilder()
    For Each script As String In smoScripter.EnumScript(smoTables)
        outputScript.Append(script)
    Next

    Return outputScript.ToString()
End Using

Слишком поздно, чтобы помочь мне, я также нашел других людей, которые обсуждали ту же проблему на форумах MSDN:

ScriptData не данные скрипта

person Community    schedule 11.05.2010