into - 为SQL Server表自动生成INSERT语句的最佳方法是什么?



sql server insert语法 (13)

Jane Dallaway的存储过程: http://docs.google.com/leaf?id=0B_AkC4ZdTI9tNWVmZWU3NzAtMWY1My00NjgwLWI3ZjQtMTY1NDMxYzBhYzgx&hl=en_GB ://docs.google.com/leaf?id=0B_AkC4ZdTI9tNWVmZWU3NzAtMWY1My00NjgwLWI3ZjQtMTY1NDMxYzBhYzgx&hl=zh_CN。 文档是一系列博客文章: https://www.google.com/search?q=spu_generateinsert&as_sitesearch=http%3A%2F%2Fjane.dallaway.com : https://www.google.com/search?q=spu_generateinsert&as_sitesearch=http%3A%2F%2Fjane.dallaway.com

我们正在编写一个新的应用程序,在测试时,我们需要一些虚拟数据。 我已经使用MS Access将这些数据添加到相关表格中。

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

第一部分(删除和重新创建)是一个简单的sql脚本,但最后一部分让我感到畏缩。 我想要一个包含一堆INSERT的安装脚本来重新生成虚拟数据。

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

我正在考虑类似于TOAD(对于Oracle)的情况,您可以右键单击网格并单击另存为 - >插入语句,然后它只会在您想要的任何位置转储大型SQL脚本。

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

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


Answer #1

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 
...

Answer #2

不确定,如果我正确理解你的问题。

如果MS-Access中有数据需要将其移至SQL Server,则可以使用DTS。
而且,我想你可以使用SQL profiler来查看所有的INSERT语句。


Answer #3

不要使用插入物,使用BCP



Answer #5

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

如果你还没有产品,那么你应该创建一个他们想要的数据库(新鲜)。 然后,复制该数据库并将该新创建的数据库用作您的测试环境。 当你想要干净的版本,只需复制你的干净的一个, 鲍勃的叔叔


Answer #6

微软应该宣传SSMS 2008的这一功能。您正在寻找的功能已内置到生成脚本实用程序中,但该功能在默认情况下处于关闭状态,并且必须在脚本编写表时启用。

这是一个快速运行的过程,为您的表中的所有数据生成INSERT语句,不使用SQL Management Studio 2008的脚本或加载项:

  1. 右键单击数据库并转到任务 > 生成脚本
  2. 选择要生成脚本的表(或对象)。
  3. 转到设置脚本选项选项卡并单击高级按钮。
  4. 在“ 常规”类别中,转到要编写脚本的数据类型
  5. 有3个选项: Schema Only仅数据Schema和Data 。 选择适当的选项并点击OK

然后您将直接从SSMS获取CREATE TABLE语句和所有INSERT语句。


Answer #7

您可以使用SSMS工具包(适用于SQL Server 2005和2008)。 它带有一个用于生成插入语句的功能。

http://www.ssmstoolspack.com/


Answer #8

我们使用这个存储过程 - 它允许你定位特定的表,并使用where子句。 你可以在here找到文字。

例如,它可以让你这样做:为表'titles'生成INSERT语句:

EXEC sp_generate_inserts 'titles'

Answer #9

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

sqlite3 foo.sqlite .dump > foo_as_a_bunch_of_inserts.sql


Answer #10

我正在使用SSMS 2008版本10.0.5500.0。 在此版本中,作为“生成脚本”向导的一部分,而不是高级按钮,下面是一个屏幕。 在这种情况下,我只想插入数据并且不需要创建语句,所以我必须更改两个圈选的属性


Answer #11

我用这个script放在我的博客上( 如何在sql server上生成插入语句过程 )。

到目前为止我已经为我工作,虽然他们可能是我还没有发现的错误。


Answer #12

这也可以使用Visual Studio来完成(至少在版本2013以后)。

在VS 2013中,也可以过滤 inserts语句所基于的行列表,这在SSMS中是不可能的,就我所知。

执行以下步骤:

  • 打开“SQL Server对象资源管理器”窗口(菜单:/ View / SQL Server对象资源管理器)
  • 打开/展开数据库及其表格
  • 右键单击表格并从上下文菜单中选择“查看数据”
  • 这将显示主要区域中的数据
  • 可选步骤:点击过滤器图标“排序和过滤数据集”(结果上方的行左侧的第四个图标),并将一些过滤器应用于一列或多列
  • 点击“Script”或“Script to File”图标(上排右侧的图标,它们看起来像小纸片)

这将为所选表创建(条件)插入语句到活动窗口或文件。


“过滤器”和“脚本”按钮Visual Studio 2013





code-generation