【问题标题】:Import wizard with subqueries带有子查询的导入向导
【发布时间】:2017-07-07 19:29:00
【问题描述】:

我想将 100k+ 行导入到 SQL Server 表中。

我的插入是这样的(观察作为子查询的第 6 个值):

INSERT INTO BD_S3I.dbo.AGENDA 
(COD_UNDFBR, COD_DCPLNA, COD_TECNCA, COD_ATVIDE, DAT_PROGM_AGENDA, NUM_SQNCL_AGENDA, DAT_FINAL_AGENDA, COD_OCORR, COD_ROTA, NUM_SEMAN_PRGINS, NUM_DIAIN_PRGINS, DAT_INIC_PRGINS, MRC_SITUA_AGENDA, DAT_SUSPN_AGENDA, DAT_CONCL_AGENDA, DAT_REPRG_AGENDA, DCR_SITUA_AGENDA, DCR_AGENDA, MRC_AVISO_AGENDA, MRC_NEGLG_AGENDA, NUM_PERIO_PRGINS, DAT_DIAIN_PRGINS, DAT_JUSTN_AGENDA, COD_MTVNVS, MRC_ERP_AGENDA, COD_USUS3I_JUSTN)

VALUES

(1, 290, 2, 6, '2017-09-11 00:00:00.000', (SELECT CASE WHEN MAX(AGENDA.NUM_SQNCL_AGENDA) + 1 IS NULL THEN 1 ELSE MAX(AGENDA.NUM_SQNCL_AGENDA) + 1 END FROM AGENDA WHERE AGENDA.COD_UNDFBR = 1 AND AGENDA.COD_DCPLNA = 290 AND AGENDA.COD_TECNCA = 2 AND AGENDA.COD_ATVIDE = 6 AND AGENDA.DAT_PROGM_AGENDA = '2017-09-11 00:00:00.000'), '2017-09-17 00:00:00.000', NULL, 492, NULL, NULL, '2017-07-24 08:30:00.000', 'P', NULL, NULL, NULL, NULL, NULL, 'S', 'S', 7, '2017-07-24 00:00:00.000', NULL, NULL, 'N', NULL);

我将所有 100k 插入放在彼此下方并开始导入。它工作正常,但是执行所有 100k+ 行需要太多时间。

我在考虑使用导入向导(时间比较好?)。

问题是当我用我的数据选择excel文件时,导入向导不理解关于值的子查询。它称之为长文本。

【问题讨论】:

  • 是的,您不能在值列表中运行子查询。

标签: sql excel import


【解决方案1】:

选择至少一种需要插入到第 6 列的返回类型。 就像

( SELECT x = CASE .... )

或者在最后使用返回类型和子查询。

【讨论】:

    【解决方案2】:

    只需将您的 INSERT...VALUES 转换为 INSERT...SELECT 即可,因为所有其他值都是标量,并且可以包含在子查询的 SELECT 语句中:

    INSERT INTO BD_S3I.dbo.AGENDA (COD_UNDFBR, COD_DCPLNA, COD_TECNCA, COD_ATVIDE, 
                                   DAT_PROGM_AGENDA, NUM_SQNCL_AGENDA, DAT_FINAL_AGENDA, 
                                   COD_OCORR, COD_ROTA, NUM_SEMAN_PRGINS, NUM_DIAIN_PRGINS, 
                                   DAT_INIC_PRGINS, MRC_SITUA_AGENDA, DAT_SUSPN_AGENDA, 
                                   DAT_CONCL_AGENDA, DAT_REPRG_AGENDA, DCR_SITUA_AGENDA, 
                                   DCR_AGENDA, MRC_AVISO_AGENDA, MRC_NEGLG_AGENDA, 
                                   NUM_PERIO_PRGINS, DAT_DIAIN_PRGINS, DAT_JUSTN_AGENDA, 
                                   COD_MTVNVS, MRC_ERP_AGENDA, COD_USUS3I_JUSTN)
    
    SELECT 1, 290, 2, 6, '2017-09-11 00:00:00.000', 
           CASE WHEN MAX(AGENDA.NUM_SQNCL_AGENDA) + 1 IS NULL 
                THEN 1 
                ELSE MAX(AGENDA.NUM_SQNCL_AGENDA) + 1 
           END,
           '2017-09-17 00:00:00.000', NULL, 492, NULL, 
            NULL, '2017-07-24 08:30:00.000', 'P', 
            NULL, NULL, NULL, NULL, NULL, 'S', 'S', 7, 
            '2017-07-24 00:00:00.000', NULL, NULL, 'N', NULL
    
    FROM AGENDA 
    WHERE AGENDA.COD_UNDFBR = 1 AND AGENDA.COD_DCPLNA = 290 
      AND AGENDA.COD_TECNCA = 2 AND AGENDA.COD_ATVIDE = 6 
      AND AGENDA.DAT_PROGM_AGENDA = '2017-09-11 00:00:00.000')
    

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多