|
|
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
Добрый вечер! Помогите, пожалуйста, с такой задачей : Есть такой код : Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Происходит вставка новой записи в базу. Всё вставляется нормально, но мне нужно заодно вернуть id этого только-что вставленного элемента. Ошибка такая : Код: c# 1. 2. Буду признателен за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 00:41 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
получаем ид последней вставленной записи как-то так: SELECT @@IDENTITY as ID и кстати, инсерт выполняй при помощи ExecuteNonQuery ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 01:23 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
SanSYS@@IDENTITY На свалку ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 09:11 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
SanSYSполучаем ид последней вставленной записи как-то так: SELECT @@IDENTITY as ID и кстати, инсерт выполняй при помощи ExecuteNonQuery Почти так, но лучше scope_identity . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 10:30 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
ShSergeSanSYSполучаем ид последней вставленной записи как-то так: SELECT @@IDENTITY as ID и кстати, инсерт выполняй при помощи ExecuteNonQuery Почти так, но лучше scope_identity . Спасибо, буду иметь ввиду msdnФункции SCOPE_IDENTITY и @@IDENTITY возвращают последние значения идентификатора, созданные в таблицах во время текущего сеанса. Однако функция SCOPE_IDENTITY возвращает значения, вставленные только в рамках текущей области, тогда как действие функции @@IDENTITY не ограничивается никакими областями. МСУSanSYS@@IDENTITY На свалку ) Действительно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 13:54 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
SanSYS, Например, если у тебя в базе имеется триггер, который чего-то тоже инсертит (например, лог или ещё чего). то результат в @@identity будет кривой. Он возьмётся из той другой таблицы, которая была последняя. ПС. А вообще-то, имхо, идентити можно на гуиды заменить. Я сейчас, когда базы криэйчу, их и использую. С ними проблем гораздо меньше, особенно если вдруг нужна репликация, или просто в справочник записей добавить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 14:07 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
ShSergeSanSYS, Например, если у тебя в базе имеется триггер, который чего-то тоже инсертит (например, лог или ещё чего). то результат в @@identity будет кривой. Он возьмётся из той другой таблицы, которая была последняя. Да я полностью понял ошибку :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 14:33 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
В T-SQL же появился OUTPUT . Может его стоит использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 14:55 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
ShSergeПС. А вообще-то, имхо, идентити можно на гуиды заменить. Я сейчас, когда базы криэйчу, их и использую. С ними проблем гораздо меньше uniqueidentifier занимает 16 байтов, int - 4 байта. Возьмем для примера таблицу из 10 млн записей. 160 Мб против 40 Мб на кластерый индекс - весьма существенная разница, так или иначе поиск будет медленнее. А теперь внимание вопрос - нафига оно нужно? Во-вторых, не существенно, но всё же - читабельность тоже играет некоторую положительную роль в сопровождении системы. ShSergeособенно если вдруг нужна репликация, или просто в справочник записей добавить. "Вдруг" репликация не возникает. Её планируют, причем весьма тщательно. Это как "вдруг" родить, минуя саму беременность :) Репликация (если речь о мерж-репликации или о репликации транзакций, а не о простом снапшоте) сама создаст гуид для синхронизации. Ну и еще между Publisher(s) и Subscriber(s) нужно сделать непересекающееся множество значений под кластерный интовый индекс. Так что идти на такие жертвы (по поводу гуидов) ради того, "а вдруг появится репликации" - безумие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 14:58 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
МСУ, Какие нафиг "мерж-репликации или о репликации транзакций"? Я про "мерж" говорил, что совершенно очевидно из контекста. Вы сами это слово выдумали? Если где-то нахватались, то хотя бы к месту используйте. ПС. Да, гуиды - лучше. Я даже спорить на этот счёт не собираюсь. Лучше и всё! На миллионах записей отлично работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 15:37 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
ShSergeМСУ, Какие нафиг "мерж-репликации или о репликации транзакций"? Я про "мерж" говорил, что совершенно очевидно из контекста. Вы сами это слово выдумали? Если где-то нахватались, то хотя бы к месту используйте. RTFM Merge Replication Overview Transactional Replication Overview Snapshot Replication Overview ShSergeПС. Да, гуиды - лучше. Я даже спорить на этот счёт не собираюсь. Лучше и всё! На миллионах записей отлично работают. Ну что ж, отличный аргумент. Не поспоришь, блин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 15:42 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
Очевидно что guid занимает больше места, дольше строится индекс, нечитабелен, но при этом поиск по нему в рамках того или иного сервера будет хорошим Следует помнить что GUID это именно http://ru.wikipedia.org/wiki/GUID] Globally Unique Identifier и далеко не для каждой сущности действительно необходим глобально уникальный идентификатор, имхо http://msdn.microsoft.com/ru-ru/library/ms190215.aspx Тип данных uniqueidentifier имеет несколько недостатков. Значения являются длинными и непонятными. Поэтому пользователям сложно вводить их без ошибок и еще сложнее запоминать. Значения являются случайными, в них нельзя поместить никакие последовательности, которые сделали бы значения более осмысленными для пользователей. Не существует способа определить, в какой последовательности были созданы значения типа uniqueidentifier. Они не приспособлены для использования существующими приложениями, полагающимися на последовательное возрастание ключей в последовательности. Занимая 16 байт, тип данных uniqueidentifier является относительно большим по сравнению с другими типами данных (например с 4-байтовыми целыми). Индексы, построенные на ключах типа uniqueidentifier, могут работать медленнее по сравнению с индексами, где используются ключи типа int. Если глобальная уникальность не требуется или нужен ключ с последовательно возрастающими значениями, рекомендуется использовать свойство IDENTITY. из-за товарищей МСУ & ShSerge чувствую я подсяду на этот форум :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 17:09 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
МСУuniqueidentifier занимает 16 байтов, int - 4 байта. Возьмем для примера таблицу из 10 млн записей. 160 Мб против 40 Мб на кластерый индекс - весьма существенная разница, так или иначе поиск будет медленнее. А теперь внимание вопрос - нафига оно нужно? Во-вторых, не существенно, но всё же - читабельность тоже играет некоторую положительную роль в сопровождении системы. Я бы внес поправочку: в MSSQL при последовательной вставке мы будем иметь не 160 Мб для uniqueidentifier, а больше 1 ГБ... Против все тех же 40 Мб для монотонно нарастающего int. И это если рассматривать обычные индексы... Если начать рассматривать кластерные индексы - цифры будут выглядеть внушительнее, хотя и с примерно тем же соотношением... ShSergeМСУ, ПС. Да, гуиды - лучше. Я даже спорить на этот счёт не собираюсь. Лучше и всё! На миллионах записей отлично работают. GUID в, например, кластерном первичном индексе? Да, уж... Действительно "лучше"... Даже для "всего миллионов записей"... А это ничего ничего, что из-за "размазывания" такого индекса размер базы будет "в-среднем" примерно раз в восемь больше, чем объем хранимых в базе данных? И этот действительно ничего, что для выборки любых данных по ПК диск начнет шерстить весь файл данных в абсолютно случайном порядке размещения страниц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 17:18 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
ShSergeДа, гуиды - лучше. Я даже спорить на этот счёт не собираюсь. Лучше и всё! На миллионах записей отлично работают. да не, не лучше, у вас просто сервер хороший, видимо, ну право :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 17:22 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
SanSYSОчевидно что guid занимает больше места, дольше строится индекс, нечитабелен, но при этом поиск по нему в рамках того или иного сервера будет хорошим Идентификация записи по такому типу индекса будет хорошей, но вот ЗАПРОСЫ с участием связей по такому типу индекса ХОРОШИМИ быть не могут... :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 17:27 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
SanSYSShSergeДа, гуиды - лучше. Я даже спорить на этот счёт не собираюсь. Лучше и всё! На миллионах записей отлично работают. да не, не лучше, у вас просто сервер хороший, видимо, ну право :) А вот это дело поправимое - с ростом объема данных все станет аккурат на свои места... Хотя, если это не "их" сервер и не "их" база данных - им будет все равно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 17:30 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 18:53 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
bigint ограничен, и через пару десятков миллионов лет - базе конец :) А пока, если глобальность не нужна - гуид в топку ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 19:26 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
Посмотрел C:\Windows\Microsoft.NET\Framework\ v4.0.30319 \InstallCommon.sql и прочие: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Как видим гид используется для идентификации базовых сущностей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 20:21 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
SanSYSКак видим гид используется для идентификации базовых сущностей Осталось понять, что такое не базовые сущности :) По поводу мембершипа - это как-раз универсальная и расширяемая архитектура безопасности с уникальными идентификаторами не только уровня таблиц. А по поводу бизнес схем могу посоветовать глянуть на более или менее реалистичную AdventureWorks. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 20:57 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
uniqueidentifier нужем только там, где есть конкретное требование использовать его. Точно так же, как и datetime, bit и т.д. Разбрасываться им направо и налево - параноя, граничащая с эмбицилизмом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 21:00 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
SanSYS Код: sql 1. Да они там вообще не мелочатся ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 21:05 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
МСУuniqueidentifier нужем только там, где есть конкретное требование использовать его. Точно так же, как и datetime, bit и т.д. Разбрасываться им направо и налево - параноя, граничащая с эмбицилизмом. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 21:12 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
ПарамонSanSYS Код: sql 1. Да они там вообще не мелочатся ) норм, главное что не nchar ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 21:13 |
|
||
|
Как получить id только-что вставленной записи
|
|||
|---|---|---|---|
|
#18+
На веб-страницах часто используется id записи (id новости, id юзера и прочее), как в самих тегах - <div id="s_id_элемента"></div>, так и в ссылках - <a href="page.aspx?id=1"></a>. С гуидами это всё превратится в длинный нечитаемый набор символов (плохо при разработке/отладке) + возрастание трафика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2012, 04:06 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=37722193&tid=1359740]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 560ms |

| 0 / 0 |
