如何降低此表达式的复杂性



我的查询中有一个 IIF,上面写着:

IIF(ApplicationDate BETWEEN @START and @END
AND convert(varchar,LEFT(AAA.LastName,2)+LEFT(BBB.CITY,2)+BBB.ZIPCode+RIGHT(CCC.SSN,4)) in <list>,THIS,THAT)

其中"list"是看起来像"MCSM349954987"的 13,000 个 varchar 字符串

当我运行此查询时,我收到一条错误消息,指出"内部错误:已达到表达式服务限制。请在查询中查找可能复杂的表达式,并尝试简化它们。

有没有办法简化此操作,以便我的查询将运行?

看起来你想弄清楚如何比较这个列表......您可以使用子查询来执行此操作。

首先,使用 OPENROWSET 将 excel 中的值引入TEMP TABLE

IF OBJECT_ID('tempdb..#tempTable') IS NOT NULL DROP TABLE #tempTable
SELECT * INTO #tempTable
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0 Xml;HDR=YES;Database=C:yourFolderyourFile.xlsx',
    [ProductList$]);

现在,您可以通过子选择将其用于IN子句。

SELECT
CASE 
   WHEN ApplicationDate BETWEEN @START and @END
       AND (convert(varchar,LEFT(AAA.LastName,2)+LEFT(BBB.CITY,2)+BBB.ZIPCode+RIGHT(CCC.SSN,4)) in (select * from #tempTable) THEN 'True'
       ELSE 'False'
   END as SomeNewColumn
FROM 
   SomeTable

最新更新