我们正在编写一个新的应用程序,在进行测试时,我们将需要一堆虚拟数据。我已经通过使用MS Access将excel文件转储到相关表中添加了这些数据。
每隔一段时间,我们想要“刷新”相关的表,这意味着将它们全部删除,重新创建它们,并运行已保存的MS Access追加查询。
第一部分(删除和重新创建)是一个简单的sql脚本,但最后一部分让我畏缩。我想要一个单独的设置脚本,它有一堆insert来重新生成虚拟数据。
我现在有数据在表格里。从该数据集自动生成一个大的INSERT语句列表的最佳方法是什么?
我能想到的唯一方法是将表保存到excel表格中,然后编写excel公式为每一行创建一个INSERT,这肯定不是最好的方法。
我使用2008 Management Studio连接到SQL Server 2005数据库。
sp_generate_inserts的第一个链接非常酷,这是一个非常简单的版本:
DECLARE @Fields VARCHAR(max); SET @Fields = '[QueueName], [iSort]' -- your fields, keep []
DECLARE @Table VARCHAR(max); SET @Table = 'Queues' -- your table
DECLARE @SQL VARCHAR(max)
SET @SQL = 'DECLARE @S VARCHAR(MAX)
SELECT @S = ISNULL(@S + '' UNION '', ''INSERT INTO ' + @Table + '(' + @Fields + ')'') + CHAR(13) + CHAR(10) +
''SELECT '' + ' + REPLACE(REPLACE(REPLACE(@Fields, ',', ' + '', '' + '), '[', ''''''''' + CAST('),']',' AS VARCHAR(max)) + ''''''''') +' FROM ' + @Table + '
PRINT @S'
EXEC (@SQL)
在我的系统中,我得到了这样的结果:
INSERT INTO Queues([QueueName], [iSort])
SELECT 'WD: Auto Capture', '10' UNION
SELECT 'Car/Lar', '11' UNION
SELECT 'Scan Line', '21' UNION
SELECT 'OCR', '22' UNION
SELECT 'Dynamic Template', '23' UNION
SELECT 'Fix MICR', '41' UNION
SELECT 'Fix MICR (Supervisor)', '42' UNION
SELECT 'Foreign MICR', '43' UNION
...
正如@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