尝试将查询附加到临时表上

时间:2016-10-07 18:07:32

标签: sql sql-server sql-server-2008

使用SQL Server 2008-R2

我有购买ID的csv,在我的数据库中有一个包含这些购买ID的表格,并且我们的系统中有相应的用户ID。在使用之后我需要这些来运行更复杂的查询。我试图批量插入或运行导入向导但我没有权限。我的新想法是使用SELECT INTO创建一个#temp,然后在下面进行查询。

SELECT *
  INTO ##PurchaseIDs
  FROM
(
SELECT PurchaseID, UserID, Added
      FROM Users
     WHERE PurchaseID IN (
/* These are the csv IDs just copied and pasted in */
'49397828',
'49397883',
etc.

会发生大约55,000个ID,因此我收到此错误。

  

查询处理器耗尽了内部资源而无法使用   制定查询计划。这是一个罕见的事件,只有预期   非常复杂的查询或引用非常大的查询   表或分区的数量。请简化查询。如果你   相信您错误地收到了此消息,请联系客户   支持服务以获取更多信息。

如果我上传大约30,000,那么我的新计划是看我是否可以创建一个临时表,然后在其末尾添加一个新表。我也对如何完成我想要做的事情有其他想法。我附上了我在下面想到的想法。

INSERT *
  INTO ##PurchaseIDs
  FROM (
SELECT PurchaseID, UserID, Added
      FROM Users
     WHERE PurchaseID IN (
/* These are the OTHER csv IDS just copied and pasted in */
'57397828',
'57397883',
etc.

1 个答案:

答案 0 :(得分:1)

您需要创建临时表并将IN子句中的值插入临时表并加入临时表以获取结果

Create table #PurchaseIDs (PurchaseID int)

insert into #PurchaseIDs (PurchaseID)
Select '57397828'
Union All
Select '57397828'
Union All
......
values from csv

现在使用Exists检查临时表中是否存在PurchaseID而不是IN子句

SELECT PurchaseID,
       UserID,
       Added
FROM   Users u
WHERE  EXISTS (SELECT 1
               FROM   #PurchaseIDs p
               WHERE  u.PurchaseID = p.PurchaseID)