我们正在编写一个新的应用程序,在进行测试时,我们将需要一堆虚拟数据。我已经通过使用MS Access将excel文件转储到相关表中添加了这些数据。
每隔一段时间,我们想要“刷新”相关的表,这意味着将它们全部删除,重新创建它们,并运行已保存的MS Access追加查询。
第一部分(删除和重新创建)是一个简单的sql脚本,但最后一部分让我畏缩。我想要一个单独的设置脚本,它有一堆insert来重新生成虚拟数据。
我现在有数据在表格里。从该数据集自动生成一个大的INSERT语句列表的最佳方法是什么?
我能想到的唯一方法是将表保存到excel表格中,然后编写excel公式为每一行创建一个INSERT,这肯定不是最好的方法。
我使用2008 Management Studio连接到SQL Server 2005数据库。
我对这个问题的贡献是一个Powershell INSERT脚本生成器,它允许您为多个表编写脚本,而不必使用麻烦的SSMS GUI。非常适合快速将“种子”数据持久化到源代码控制中。
将下面的脚本保存为“filename.ps1”。
对“自定义我”下的区域进行自己的修改。
您可以以任意顺序将表列表添加到脚本中。
您可以在Powershell ISE中打开脚本并点击播放按钮,或者简单地在Powershell命令提示符中执行脚本。
默认情况下,生成的INSERT脚本将是“SeedData”。与脚本相同的文件夹下。
您需要安装SQL Server管理对象程序集,如果您安装了SSMS,则应该安装该程序集。
Add-Type -AssemblyName ("Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")
Add-Type -AssemblyName ("Microsoft.SqlServer.ConnectionInfo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")
#CUSTOMIZE ME
$outputFile = ".\SeedData.sql"
$connectionString = "Data Source=.;Initial Catalog=mydb;Integrated Security=True;"
$sqlConnection = new-object System.Data.SqlClient.SqlConnection($connectionString)
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection($sqlConnection)
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conn)
$db = $srv.Databases[$srv.ConnectionContext.DatabaseName]
$scr = New-Object Microsoft.SqlServer.Management.Smo.Scripter $srv
$scr.Options.FileName = $outputFile
$scr.Options.AppendToFile = $false
$scr.Options.ScriptSchema = $false
$scr.Options.ScriptData = $true
$scr.Options.NoCommandTerminator = $true
$tables = New-Object Microsoft.SqlServer.Management.Smo.UrnCollection
#CUSTOMIZE ME
$tables.Add($db.Tables["Category"].Urn)
$tables.Add($db.Tables["Product"].Urn)
$tables.Add($db.Tables["Vendor"].Urn)
[void]$scr.EnumScript($tables)
$sqlConnection.Close()
微软应该宣传SSMS 2008的这个功能。您正在寻找的特性内置于Generate Script实用程序中,但是该功能在默认情况下是关闭的,并且在编写表脚本时必须启用。
这是一个快速运行,为您表中的所有数据生成INSERT语句,不使用SQL Management Studio 2008脚本或插件:
右键单击数据库,转到Tasks > Generate Scripts。
选择要针对其生成脚本的表(或对象)。
转到设置脚本选项选项卡,然后单击高级按钮。
在“常规”类别中,转到“脚本的数据类型”
有3个选项:仅模式、仅数据和模式和数据。选择适当的选项并单击OK。
然后,您将直接从SSMS中获取数据的CREATE TABLE语句和所有INSERT语句。