如何搜索给定字符串值"周围"的行?

ric*_*ent 3 t-sql sql-server-2005

我有一个带有varchar()字段的表,identifier其中包含该实体的唯一名称.

我想用一个给定的标识查找表,找到行多达10行上标识的两侧,按字母顺序排序(即,被搜索到的标识符和两侧及其邻近行).

在SQL Server 2005中制定它的最佳方法是什么?我猜这里有一些ROW_NUMBER()神奇的东西可以做到这一点,但是我找不到任何可以执行此类操作的查询.

这是我到目前为止所能接近的,但性能很糟糕:

WITH 
  allrows AS (
   SELECT *, ROW_NUMBER() OVER(ORDER BY identifier DESC) AS RN
       FROM mytable
  ),
  centerrow AS (
    SELECT RN AS CRN FROM allrows WHERE identifier = 'MyValue'
  )
SELECT * FROM allrows, centerrow 
WHERE RN BETWEEN (centerrow.CRN - 10) AND (centerrow.CRN + 10)
Run Code Online (Sandbox Code Playgroud)

该表有超过200万条记录,标识符字段可以长达1000个字符.

Pit*_*DBA 5

SELECT TOP 11 * FROM MyTable WHERE identifier >= 'My Value' ORDER BY identifier ASC
UNION ALL
SELECT TOP 10 * FROM MyTable WHERE identifier < 'My Value' ORDER BY identifier DESC
Run Code Online (Sandbox Code Playgroud)