【问题标题】:How to insert data in to temp table from two tables如何从两个表中将数据插入临时表
【发布时间】:2021-08-11 16:56:02
【问题描述】:

我有两个表,它们具有相同的列,但名称不同,Request 和 Archive_Request。这些表包含很多记录。我想从两个表中插入临时表 #TEMPTABLE 的值,但没有任何有效的性能

This is temp table #TEMPTABLE (RequestId, RequestType, RequestStatus)    

下面是从表中选择数据的查询。

SELECT RequestID, RequestType, RequestStatus
       FROM Request 
       WHERE ((UPPER(SOURCE) IN ('KMP', 'DOCUSIGN') 
       AND UPPER(RequestStatus)  IN ('RETURNED REQUEST', 'COMPLETED')))   
       AND (CreatedBy = @MyID);


SELECT RequestID, RequestType, RequestStatus
       FROM Archive_Request 
       WHERE ((UPPER(SOURCE) IN ('KMP', 'DOCUSIGN') 
       AND UPPER(RequestStatus)  IN ('COMPLETED')))   
       AND (CreatedBy = @MyID);

我已尝试使用此查询在临时表中插入数据,但它不起作用。能给我解决办法吗

INSERT INTO #TEMPTABLE (RequestId, RequestType, RequestStatus)

    SELECT B.RequestId, C.RequestId, B.RequestType, C.RequestType, B.RequestStatus, C.RequestStatus
    FROM Request AS B , Archive_Request AS C
    WHERE ((UPPER(B.SOURCE) IN ('KMP', 'DOCUSIGN') and ((UPPER(C.SOURCE) IN ('KMP', 'DOCUSIGN') 
    AND UPPER(B.RequestStatus)  IN ('RETURNED REQUEST', 'COMPLETED'))) 
    AND UPPER(C.RequestStatus)  IN ('COMPLETED')))
    AND (B.CreatedBy = @MyID) AND (C.CreatedBy = @MyID) ;

【问题讨论】:

  • 当您遇到错误时,请发布完整的错误消息。您的尝试肯定会遇到一个。此处不需要连接 - 尤其是使用 old-style join syntax 的连接,您应该避免。
  • 您为什么在WHERE 的列中使用UPPER?如果您使用区分大小写的排序规则,那么'KMP' 应该 匹配'kmp'。如果不是,它们只会损害查询的性能。

标签: sql sql-server


【解决方案1】:

union all怎么样?

SELECT RequestID, RequestType, RequestStatus
INTO #TEMPTABLE
   FROM Request 
   WHERE ((UPPER(SOURCE) IN ('KMP', 'DOCUSIGN') 
   AND UPPER(RequestStatus)  IN ('RETURNED REQUEST', 'COMPLETED')))   
   AND (CreatedBy = @MyID);
UNION ALL
SELECT RequestID, RequestType, RequestStatus
   FROM Archive_Request 
   WHERE ((UPPER(SOURCE) IN ('KMP', 'DOCUSIGN') 
   AND UPPER(RequestStatus)  IN ('COMPLETED')))   
   AND (CreatedBy = @MyID);

【讨论】:

  • 我的表中有 10 万条记录,这不会造成任何性能问题吗?
  • 这里的“性能问题”是原始查询中缺乏 SARGability,而不是 UNION ALL @chub。另外,什么是“十万”?
  • 一百万条记录@gordon
  • @chub 。 . .不比你原来的两个查询更多。 union all 增加了一点开销。
猜你喜欢
  • 2017-11-13
  • 2017-04-02
  • 1970-01-01
  • 2012-07-31
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多