Привет всем, спасибо, что нашли время, чтобы разобраться в моем вопросе,
Фон
Я использую функцию ROW_NUMER () вместе с PARTITION BY. Инструкция .ORDER BY для установки значения varchar с возрастающим значением int в конце его для каждого значения в одной из моих таблиц.
SELECT component_module_id as component_module_id,
component_property_id,
'cf' + CAST(ROW_NUMBER() OVER (PARTITION BY component_module_id ORDER BY component_module_id) as VARCHAR) AS cf
FROM component_property
Здесь значение 'cf' происходит от cf1-cfX для каждого component_module_id
Мой вопрос
Всякий раз, когда я пытаюсь использовать эти значения cf где-либо, например сохраненные во временной таблице другие операторы упорядочения и группировки изменяют эти значения. Это похоже на операторы для генерации значений 'cf', а не сами значения 'cf'.
После вставки запроса выше во временную таблицу #t -
SELECT * FROM #t ORDER BY cf
I получить значения 'cf', которые начинаются с cf1 и переходят к cf10, а затем к cf100, с диапазоном значений cf от cf1 до cf900 ... Я должен получать только значения в диапазоне от c1 до cf29.
Мой вопрос здесь - почему значения в этом столбце обрабатываются иначе, чем любое другое нормальное значение? Почему вычисление ROW_NUMBER () OVER (PARTITION BY ....)) передается для дальнейших запросов в дальнейшем? (если это на самом деле то, что происходит). И наконец, как я могу обрабатывать эти значения 'cf' как обычные значения VARCHAR и не позволять им изменяться на меня всякий раз, когда я пытаюсь сгруппировать их или упорядочить по ним.
Спасибо за любую помощь!
Обновление
Я принял предложение от Ларну,
"Похоже, вам будет лучше просто сохранить значение int и использовать (PERSISTED) вычисляемый столбец для объединения вашего префикса и значения ROW_NUMBER. "
и мои значения 'cf' теперь отображаются правильно после сортировки. Спасибо всем, отметившим, как решено.