是否可以将数据编写为 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 语句?的主要内容,如果未能解决你的问题,请参考以下文章