Все зависит от вашего клиентского доступа к данным. Многие рамки ORM полагаются на явный запрос SCOPE_IDENTITY во время операции вставки.
Если вы полностью контролируете уровень доступа к данным, возможно, лучше вернуть SCOPE_IDENTITY() в качестве выходного параметра. Обертка возврата в результирующем наборе добавляет лишние метаданные для описания набора результатов и усложняет код для обработки результата запроса.
Если вы предпочитаете набор результатов возврата, то снова спорно лучше использовать предложение OUTPUT:
INSERT INTO MyTable (col1, col2, col3)
OUTPUT INSERTED.id, col1, col2, col3
VALUES (@col1, @col2, @col3);
Таким образом, вы можете получить весь вставленную строку обратно, в том числе по умолчанию и вычисляемые столбцы, и вы получаете набор результатов, содержащий одну строку для каждой вставленной строки, которая корректно работает с установленными ориентированными пакетными вставками.
В целом, я не вижу ни одного случая при возврате SCOPE_IDENTITY()
, так как результат был бы хорошей практикой.
Хорошая точка при возврате нескольких строк, если было несколько вставок. Может быть, gbn избил вас до этого, но ваш был более тщательным. В моем конкретном случае я не использую ORM и (пока) не будет вставлять сразу несколько записей. –
@Remus: вы сказали: «В общем, я не вижу ни одного случая при возвращении SCOPE_IDENTITY(), поскольку результирующий набор будет хорошей практикой». Тогда как еще это можно сделать? Вы подразумеваете, что общее использование SCOPE_IDENTITY() - это плохая практика? В каком смысле, пожалуйста? – Fandango68
@ Fernando68: Я говорю, что вы должны получить его как выходной параметр, а не как результат –