参数化LIKE
语句时,我在 SQL Server 2005 上遇到了针对堆表的意外表扫描......但是当与变量相同的值被硬编码时,会发生预期的索引查找。
这个问题只发生在这种特定的情况下......所以我对如何解决这个问题并不感到困惑,我对为什么会发生这种情况感到困惑。
以下 T-SQL 应在 SQL Server 2005 上重现该问题:
IF (OBJECT_ID('tempdb.dbo.#tblTest') IS NOT NULL)
DROP TABLE dbo.#tblTest
GO
CREATE TABLE dbo.#tblTest (
ID INT IDENTITY(1, 1),
SerialNumber VARCHAR(50)
)
GO
-- Populate the table with 10,000 rows
SET NOCOUNT ON
DECLARE @i INT
SET @i = 0
WHILE @i < 10000
BEGIN
INSERT INTO dbo.#tblTest VALUES(CAST(@i AS VARCHAR(10)))
SET @i = @i + 1
END
GO
-- To recreate the issue, the …
Run Code Online (Sandbox Code Playgroud)