我尝试从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的最佳方法?
答案 0 :(得分:1)
我找到了一种使用Excel的方式。
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
这是返回内容的摘要。
太容易了。