Требование - вернуть уникальное значение для каждой обработанной строки из хранимой процедуры, которая будет использоваться как фиктивный первичный ключ. Одно из решений, похоже, использует функцию ROW_NUMBER(). Другое дано here. Возможно, могут быть решения, связанные с Guid. Может ли кто-нибудь порекомендовать мне решение, которое будет эффективным и надежным?SQL Server: возвращает уникальное сгенерированное значение для каждой строки
ответ
случайное число не будет вариант (как указать уникальный).
ROW_NUMBER
- это bigint, занимающий 8 байт памяти в строке.uniqueidentifier
представляет собой структуру 16 байт и более дорогостоящим, чем получитьROW_NUMBER
, которая просто увеличивается на единицу (уникальные идентификаторы SQL являются идентификаторы GUID, сNEWID()
быть медленнее, чем из-заNEWSEQUENTIALID()
NEWSEQUENTIALID()
будет увеличиваться из семени GUID).В сценариях, где вы
INSERT
в переменную таблицы или временную таблицу, вы можете использоватьIDENTITY
. Размер хранилища - это тип данных столбца, который может быть любым целым типом (без бит, без десятичного). Он будет увеличиваться с настраиваемого смещения (по умолчанию 1) в настраиваемом шаге (по умолчанию 1).
Это, кажется, делает ROW_NUMBER
вашу лучшую подгонку, это как быстро и надежно.
Я бы порекомендовал основывать ваш выбор дизайна на более чем просто производительности. На любой разумно настроенной установке SQL Server вы почти не заметите разницы в скорости, и, если у вас нет очень ограниченных ресурсов, хранилище также не должно быть узким местом. Некоторые довольно старые benchmarks here.
Помните, что ни одна из них не поможет вам сохранить или гарантировать определенный порядок возвращаемых строк - вам все равно необходимо указать ORDER BY
ваш внешний код SELECT
, если вам нужны предсказуемые результаты.
- 1. Уникальное значение для каждой кнопки
- 2. SQL Server генерирует уникальное значение
- 3. JPA/Hibernate/MS SQL Server не возвращает сгенерированное значение идентификатора
- 4. Создайте уникальное целое число для каждой строки?
- 5. Рассчитать среднее значение для каждой строки в SQL Server
- 6. как установить уникальное значение для каждой строки по миграции Alembic
- 7. SQL Найти предыдущее значение для каждой строки
- 8. Уникальное ограничение строки в SQL Server
- 9. Выбор столбца в уникальное значение SQL Server
- 10. Триггеры SQL Server «Для каждой строки» эквивалент
- 11. Для каждой строки в SQL Server
- 12. SQL Server 2014: HASHBYTES возвращает другое значение для одной строки
- 13. Insert/Update уникальное числовое значение в SQL Server Compact Edition
- 14. Создайте уникальное числовое значение для строки
- 15. Как создать уникальное возрастающее целочисленное значение в SQL Server?
- 16. Hibernate: Значение, сгенерированное SQL-запросом
- 17. Назначить значение для каждой строки
- 18. Сравнить строки в колонку в SQL Server, и возвращает значение
- 19. Назначить значение для каждой строки
- 20. Запустить функцию SQL Server для каждой строки в таблице
- 21. SQL Server расчета процентов значений для каждой строки
- 22. SQL Server, для каждой команды
- 23. SQL Server: выбрать строки из каждой секунды
- 24. передавая значение строки SQL SERVER
- 25. SQL Server Query с комплексными вычислениями для каждой строки
- 26. Возвращает константную текстовую строку для каждой строки в столбце (динамическом) SQL Server 2008
- 27. SQL Server: разделенные записи, указывающие на уникальное значение varbinary
- 28. SQL Query: получить скорректированное значение каждой строки
- 29. fgetcsv() возвращает «true» для каждой строки
- 30. SQL JOIN возвращает запрос с неправильными идентификаторами для каждой строки
см. Здесь http://stackoverflow.com/questions/17839420/generate-guid-for-every-row-in-a-column – swe
Ответ зависит от контекста, в котором вы планируете использовать хранимую процедуру , –
Что происходит в СП и как вы возвращаете значения? Например, если у вас есть оператор select в конце SP, вы можете сделать один подход, если вы возвращаете переменную таблицы через выходной параметр, вы можете использовать другой подход. –