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

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

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

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

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

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


当前回答

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

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

其他回答

Azure Data Studio -简单的数据脚本扩展。

插入…它生成每一行的UNION ALL SELECT。

Azure Data Studio UI是基于VSCode的,我发现它是直观和快速的,包括这个OSS扩展。

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

也许你可以试试SQL Server发布向导 http://www.microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

它有一个向导,帮助您编写插入语句。

正如@Mike Ritacco提到的,但已为SSMS 2008 R2更新

右键单击数据库名称 选择任务>生成脚本 根据您的设置,介绍页面可能会显示或不显示 选择“选择特定的数据库对象”, 展开树视图并检查相关表 单击Next 单击高级 在“常规”部分,为“要脚本的数据类型”选择适当的选项 完成向导

然后,您将直接从SSMS中获取数据的所有INSERT语句。

SQL Server 2016/SSMS 13.0.159001

Right click on the database name Choose Tasks > Generate scripts Depending on your settings the intro page may show or not Choose 'Select specific database objects', Expand the tree view and check the relevant tables Click Next Click Advanced Under General section, choose the appropriate option for 'Types of data to script' Click OK Pick whether you want the output to go to a new query, the clipboard or a file Click Next twice Your script is prepared in accordance with the settings you picked above Click Finish