是否可以将数据编写为 SSIS 包中的 Insert 语句?

Posted

技术标签:

【中文标题】是否可以将数据编写为 SSIS 包中的 Insert 语句?【英文标题】:Is it possible to script data as Insert statements from within an SSIS package? 【发布时间】:2010-05-11 15:18:44 【问题描述】:

SQL Server 2008 提供了使用 Management Studio 中的“生成脚本”选项将数据编写为插入语句的功能。是否可以从 SSIS 包中访问相同的功能?

这是我想要完成的:

我有一个计划作业,它每晚运行,并从 SQL Server 2008 数据库中编写出所有架构和数据的脚本。然后它使用该脚本创建一个mirror copy SQLCE 3.5 数据库。我一直在使用 Narayana Vyas Kondreddi 的 sp_generate_inserts 存储过程来完成此操作,但它存在数据类型少的问题,并且处理超过 4,000 列也存在问题(SQL Server 2000 天的保留) .

脚本数据功能看起来可以解决我的问题,只要我可以自动化它。

有什么建议吗?

【问题讨论】:

看起来 SMO 可能会挽救这一天,但在 Scripter.Script 和 Scripter.ScriptWithList 方法的联机丛书文档中,它声明“如果在 ScriptData 属性为设置为 True。这可以防止整个数据集被脚本化为 StringCollection 对象。”因此,虽然您可以使用 SMO 做很多有趣的事情,但您通过 Management Studio 获得的出色的脚本数据功能却无法实现。 也许 SMO 将拯救这一天。您必须使用 Scripter.EnumScript 方法而不是 Scripter.Script。 【参考方案1】:

可以使用 SMO 的 Scripter.EnumScript 方法将所有表数据的脚本编写为插入语句自动化。这是我想出的代码。

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 doesn't script data

【讨论】:

【参考方案2】:

使用我的Export2SqlCE 命令行实用程序,该实用程序在 SQL Compact 兼容脚本中编写数据和架构脚本。 SMO 不支持 SQL Compact 语法和数据类型转换。

【讨论】:

我刚刚从命令行试用了 Export2SqlCE 实用程序,效果很好。我已经编写了将 SQL Server 模式转换为 SQLCE 模式的代码。我希望我在开始自己开发之前就知道这个实用程序。

以上是关于是否可以将数据编写为 SSIS 包中的 Insert 语句?的主要内容,如果未能解决你的问题,请参考以下文章

SSIS包中的错误将数据加载到azure数据仓库中

我的 SSIS 包中的源没有选择前面为零的浮点值

安装SSIS包中的数据流任务

如何在 SSIS 包中使用变量和 SQL 代码?

SSIS 包中的 Run64BitRuntime 不会粘住

如何将 DT_R8 存储在 SSIS 中的变量中