生成表中某些记录的SQL插入语句

时间:2014-04-02 08:43:35

标签: sql-server sql-server-2008 excel-vba insert where

我尝试从SQLServer 2008中的现有表自动生成插入SQL语句,但我不需要所有记录,只需要一小部分记录。 - >因此,我需要过滤生成的插入内容。在生成插入SQL语句时添加WHERE子句可以解决这个问题,但我不知道该怎么做。

本文部分回答了我的问题(SSMS内部生成器): What is the best way to auto-generate INSERT statements for a SQL Server table?

但它会导出表格的所有数据。生成的插入脚本没有排序,因此我无法轻松过滤我需要的行(繁重的手动工作)。

我也尝试过这个存储过程here(我还必须纠正一部分过程,使其与SQLServer 2008一起使用varchar替换char(255),如解释here

但它仍然无效:我收到以下错误:

  

Msg 8169,Level 16,State 2,Line 6   从字符串转换为uniqueidentifier时转换失败。

你能否给我一个从表的一部分(因此不是表的所有行)中自动生成SQL Server 2008中的SQL Insert的最佳方法?

3 个答案:

答案 0 :(得分:1)

我找到了一种使用Excel的方式。

  1. 在SSMS中进行包含WHERE子句的所需查询
  2. 选择所有结果
  3. 使用标题复制
  4. 在第4行第1列
  5. 下的Excel文件中粘贴
  6. 更改宏输出路径
  7. 更改单元格表名称
  8. 启动宏 - >获取生成的文件,并准备好再次插入数据的副本
  9. https://dl.dropboxusercontent.com/u/49776541/GenerateInsert.xlsm

答案 1 :(得分:0)

您可以使用合并语法根据特定条件在表中插入数据 使用合并,您还可以删除和更新表中的数据。您也可以这样做 单个sql语句中的多个操作。

答案 2 :(得分:0)

除了遍历Excel工作表的所有大惊小怪之外,还有一种更简单的方法可以做到这一点。

这将返回表中的所有数据(非常类似于GUI版本),在该表中,右键单击数据库并选择“任务”,然后选择“生成脚本”。 但是,与GUI版本或“导出到excel”版本不同,使用此代码行,您可以在“ WHERE”子句中指定过滤器,以仅返回特定日期或日期范围内的项目,或任何其他过滤器通常会在“ WHERE”子句中使用。

在下面的代码中,我正在使用2个简单表。一个填充了数据,另一个则没有。我想将部分或全部数据从table2传输到table3。同样,我可以按日期或其他列的一部分进行过滤。 (例如…WHERE colB喜欢'ging%';

这将生成一串“ INSERT”语句,这些语句已在准备运行的SQL查询中执行。

注意,在运行此命令之前,请将SQL Server中的输出显示从“网格”切换到“文本”。

SELECT 'INSERT', + 'INTO', + 'TestTable3', + '(',  + 'colA', + ',', + 'colB', + ',', + 'colDate', + ')', + 'values', + '(', + '''', + CAST(colA AS VARCHAR(10)), + '''', + ',', + '''', + CAST(colB AS VARCHAR(10)), + '''', + ',', + '''', + CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS 'colDate', + '''', + ')', + ';'
FROM TestTable2
WHERE colDate LIKE '2018-10-14';
GO

这是返回内容的摘要。

enter image description here 只需将结果复制/粘贴到新查询中并运行它即可。

太容易了。