使用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.
答案 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)