НЕТ, CTE не будет ничего делать с точки зрения производительности для этого запроса.Может показаться странным / неэффективным вводить одно и то же большое строковое выражение дважды.Тем не менее, SQL Server будет выполнять строковое выражение только один раз в строке, он был оптимизирован для подобных вещей.
РЕДАКТИРОВАТЬ
CTE уменьшит дублирующийся код:
;WITH AllRows AS (
SELECT DISTINCT
Client_ID
,RIGHT('0000000' + RIGHT(Client_ID
,PATINDEX('%[^0-9]%'
,REVERSE('?' + Client_ID)) - 1)
,7) AS CorrectedClient
FROM
membob_vw
)
SELECT * FROM AllRows WHERE Client_ID<>CorrectedClient
ORDER BY
1
,2
, но не будет работать лучше.ИСПОЛЬЗУЙТЕ SET SHOWPLAN_ALL ON
, и я готов поспорить, что вы видите один и тот же план запросов для каждой версии.
БУДЬТЕ ОСТОРОЖНЫ, пытаясь сделать запросы красивыми и сократить лишние фрагменты кода! простые выглядящие изменения SQL могутимеют серьезные неблагоприятные последствия для производительности!всегда проверяйте производимые изменения (выполнение и / или план запроса).Я видел тривиальные изменения, внесенные в запросы, которые выполняются мгновенно, в результате чего их выполнение занимает минуты.Ключ к SQL - производительность, а не красивый код.Если приложение работает медленно, кого волнует, хорошо ли выглядит код.