【问题标题】:Generate SQL insert statements of some records in a table生成表中某些记录的SQL插入语句
【发布时间】:2014-04-02 08:43:34
【问题描述】:

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

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

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

我还尝试了这个存储过程here(我还必须更正该过程的一部分,以使其与 SQLServer 2008 一起使用,将 char(255) 替换为 varchar,如 here 所述)

但它仍然无法正常工作:我收到以下错误:

消息 8169,第 16 级,状态 2,第 6 行 从字符串转换为唯一标识符时转换失败。

然后你能给我最好的方法来从表的一部分(因此不是表的所有行)自动生成 SQL Server 2008 中的 SQL 插入吗?

【问题讨论】:

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


    【解决方案1】:

    我自己找到了一种使用 Excel 的方法。

    1. 在 SSMS 中进行所需的查询,包括 WHERE 子句
    2. 选择所有结果
    3. 带标题复制
    4. 在此处第 4 行第 1 列下粘贴 Excel 文件
    5. 宏输出路径变化
    6. 单元格表名称更改
    7. 启动宏 --> 获取生成的文件,然后您就可以准备好再次插入数据的副本了

    https://dl.dropboxusercontent.com/u/49776541/GenerateInsert.xlsm

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢提到我以前不知道的合并,但它没有回答我生成正确插入语句的问题
      【解决方案3】:

      有一个更简单的方法可以做到这一点,而不是通过 Excel 表的所有大惊小怪。

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

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

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

      请注意,在运行此之前,请将 SQL 服务器中的输出显示从“网格”切换为“文本”。

      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
      

      这是一个返回值的 sn-p。

      只需将结果复制/粘贴到新查询中并运行它。

      太容易了。

      【讨论】:

        猜你喜欢
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多