в моей базе данных SQL Server 2005 У меня есть столбец RMA_Number
с типом данных char (10) в таблице RMA
.
Значение представляет собой возрастающее число в формате 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.
Итак,
- Это хорошая идея, чтобы заказать по столбцу char (10) (производительность и точность)?
- было бы лучше
SELECT MAX( RMA_Number ) FROM RMA
, чтобы получитьнаибольшее число (перф. и точность) - я должен придерживаться использования первичного ключа для заказа, если первые две точки неверны, или я должен использовать столбец
int
и отформатировать число в приложении?
РЕДАКТИРОВАТЬ :
Я думаю, что должен уточнить кое-что, что я не упомянул.RMA_Number не генерируется при каждой вставке.Так что, может быть, есть много записей без номера.Мартин использует первичный ключ для построения числа.Это было бы проблемой, потому что разрывы были бы слишком большими.
Заранее спасибо.