в моей базе данных SQL Server 2005 У меня есть столбец RMA_Number
с типом datatype char (10) в таблице RMA
.MAX/ORDER BY on char column
Значение увеличивается с номером RMA0002511
. Каков самый быстрый способ получить наибольшее число, чтобы увеличить его при вставке?
Мой первый подход:
SELECT TOP (1) RMA_Number
FROM RMA
WHERE (RMA_generated = 1)
ORDER BY Creation_Date DESC
Но это был подвержен ошибкам, потому что это как-то возможно, что выше RMA_Number имеет более раннюю дату создания. В качестве обходного пути сортировка по первичному ключе работает:
SELECT TOP (1) RMA_Number
FROM RMA
WHERE (RMA_generated = 1)
ORDER BY idRMA DESC
Но, возможно, это также возможный источник ошибок.
Логически лучшим способом было бы ORDER BY RMA_Number DESC
.
Но поскольку я не был уверен, что это всегда дает правильный результат, и подумал, что сортировка столбца char может замедляться, если количество записей увеличивается, я выбрал порядок по столбцу Date.
Так,
- это хорошая идея, чтобы заказать по полукокса (10) -column (производительность и точность)?
- было бы лучше
SELECT MAX(RMA_Number) FROM RMA
, чтобы получить наибольшее количество (Perf. И точность) - я должен придерживаться на использование первичного ключа к порядку, если первые два пункта является неправильным или я должен использовать
int
колонки и формат номер в приложении?
EDIT:
Я думаю, что я должен что-то уточнить, что я не упомянул. RMA_Number не создается для каждой вставки. Так что, возможно, есть много записей без номера. Мартин использует первичный ключ для создания номера. Это было бы проблемой, потому что пробелы были бы слишком большими.
Заранее спасибо.
Имеет ли значение, если промежутки времени появляются в значениях? Например, было бы хорошо иметь RMA0002511 и RMA0002513, но не RMA0002512? – 2010-12-01 14:39:09
Это не проблема. На самом деле это происходит, если я удаляю более старую запись. – 2010-12-01 14:45:10
Поскольку пробелы в порядке, я бы порекомендовал колонку идентификации, как в ответе @ Мартина. – 2010-12-01 14:51:00