我们正在编写一个新的应用程序,在进行测试时,我们将需要一堆虚拟数据。我已经通过使用MS Access将excel文件转储到相关表中添加了这些数据。

每隔一段时间,我们想要“刷新”相关的表,这意味着将它们全部删除,重新创建它们,并运行已保存的MS Access追加查询。

第一部分(删除和重新创建)是一个简单的sql脚本,但最后一部分让我畏缩。我想要一个单独的设置脚本,它有一堆insert来重新生成虚拟数据。

我现在有数据在表格里。从该数据集自动生成一个大的INSERT语句列表的最佳方法是什么?

我能想到的唯一方法是将表保存到excel表格中,然后编写excel公式为每一行创建一个INSERT,这肯定不是最好的方法。

我使用2008 Management Studio连接到SQL Server 2005数据库。


当前回答

GenerateData是一个很棒的工具。对它进行调整也很容易,因为源代码是可用的。一些不错的功能:

用于人名和地名的名称生成器 能够保存生成配置文件(在本地下载和设置后) 能够通过脚本自定义和操作生成 数据的许多不同输出(CSV, Javascript, JSON等)(以防您需要在不同的环境中测试集,并希望跳过数据库访问) 免费的。但如果你觉得软件有用,可以考虑捐赠:)。

其他回答

我使用的是SSMS 2008版本10.0.5500.0。在这个版本中,作为生成脚本向导的一部分,下面是一个屏幕,而不是一个高级按钮。在本例中,我只想插入数据而不需要create语句,因此必须更改两个圈起来的属性

生产数据库中有数据吗?如果是这样,您可以通过DTS设置数据的周期刷新。我们每周都在周末进行测试,每周都有干净、真实的测试数据是非常好的。

如果你还没有生产,那么你应该创建一个他们想要的数据库(新鲜的)。然后,复制该数据库并使用新创建的数据库作为您的测试环境。当你想要一个干净的版本时,只需再复制一遍干净的版本,就可以了。

我对这个问题的贡献是一个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()

我使用sqlite来做到这一点。我发现它对于创建scratch/test数据库非常非常有用。

sqlite3 foo。Sqlite .dump > foo_as_a_bunch_of_inserts.sql

如果您更愿意使用谷歌表,请使用SeekWell将表发送到表中,然后在日程表上插入行,因为它们被添加到表中。

请参见这里的逐步过程,或在这里观看该功能的视频演示。