较新版本的 SQL Server(在 SQL Server 2017 之后)是否优化了使用变量而不是所谓的“幻数”的存储过程中的查询?例如,而不是使用
SELECT ProductName, ProductDescription from Products
where ProductCategory in (2, 5)
我们可以使用
DECLARE @GADGETS_CATEGORY INT = 1
DECLARE @CLOTHES_CATEGORY INT = 5
SELECT ProductName, ProductDescription from Products
where ProductCategory in (@GADGETS_CATEGORY , @CLOTHES_CATEGORY)
并仍然受益于相同的查询优化?
我知道有一些关于这个主题的老问题,但很高兴知道这是否得到了改进。
是的,我知道您可以创建一个包含类别的表,与该表进行连接,然后在 WHERE 子句中使用字符串,但这不是重点。存储过程中不应存在幻数。例如,您应该能够编写此代码,并且 SQL Server 在编译 SP 时应该能够替换查询中的内联常量:
DECLARE @DEFINED_LIMIT_IN_MB SMALLINT = 5;
SELECT ImageName, ImageDescription from Images where ImageSize < @DEFINED_LIMIT_IN_MB