【发布时间】:2013-07-11 18:22:54
【问题描述】:
我需要你的建议。
我的 T-SQL 查询中有一个 CASE 语句,如下所示:
CASE
WHEN PLAN_GIVEN IN ( this list contains 1700 values to compare ) THEN 'P1'
WHEN PLAN_GIVEN IN ( this list contains 1800 values to compare ) THEN 'P2'
ELSE NULL
END AS PLAN_NAME
我无法列出所有 1700 个值 IN ( ) THEN 'P1',因为所有这些值看起来都不好。
我尝试将 1700 个值和 1800 个值保存到 lookup_table 之类的
lookup_table
columnA = all 1700 values
columnB = all 1800 values
并使用了这个查询:
CASE
WHEN PLAN_GIVEN IN (SELECT columnA from lookup_table) THEN 'P1'
WHEN PLAN_GIVEN IN (SELECT columnB from lookup_table) THEN 'P2'
ELSE NULL
END AS PLAN_NAME
上面的代码可以运行,但是要花更多的时间来执行将近 10 分钟才能完成执行。
有没有其他方法可以实现这一点?
【问题讨论】:
-
这 1700 个值从何而来?如果它们来自应用程序,您可以将它们传递给表值参数。或者,您可以向表中添加一列并更新一次 - 将任何符合条件的行设置为 true。现在,只要保持这一点,您的查询现在就可以说 WHERE IsInThisCrazyList = 1。
-
感谢亚伦的回复!这些值不是来自任何应用程序。我们的客户给了我们这些值来与查询进行比较。我无法更改现有表的结构,因此我将尝试使用表值参数。
标签: sql sql-server performance tsql case