Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как сделать генератор id и корректно выполнить insert в MSSQL
|
|||
|---|---|---|---|
|
#18+
Делаю клиента для работы с MSSQL. Не знаю как сделать генератор id для работы в сети нескольких клиентов. Как корректно выполнить insert в MSSQL при одновременной работе в сети нескольких клиентов, чтобы сохранить уникальность id? Еще вопрос: подскажите как в MSSQL заблокировать запись в таблице: чтобы запись была доступна только для блокирующего клиента и временно недоступна для всех остальных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 09:42 |
|
||
|
Как сделать генератор id и корректно выполнить insert в MSSQL
|
|||
|---|---|---|---|
|
#18+
В MS SQL при создании таблицы базы данных можно установить автоматическое формирование значения индексного поля с использованием UID или инкрементации. Есть так же функция IDENT_CURRENT для получения значения ключа последней добавленной записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 10:12 |
|
||
|
Как сделать генератор id и корректно выполнить insert в MSSQL
|
|||
|---|---|---|---|
|
#18+
Еще вопрос: подскажите как в MSSQL заблокировать запись в таблице: чтобы запись была доступна только для блокирующего клиента и временно недоступна для всех остальных. Этого делать не стоит. Особенно, если ты только осваиваешь MSSQL. Логика работы клиент-серверных приложений как раз и основана на том, что в любой момент (почти) любой пользователь может получить (изменить) интересующие его данные. Применительно к FoxPro - это соответствует логике работы в режиме оптимистической буферизации. Перестрой логику своего приложения, чтобы не было необходимости в таких "подвешенных" блокировках. Проверка на факт внесения изменений другим пользователем в момент сохранения внесенных изменений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 10:35 |
|
||
|
Как сделать генератор id и корректно выполнить insert в MSSQL
|
|||
|---|---|---|---|
|
#18+
Блокировать можно на программном уровне(физической блокировки не происходит). Используя sysprocesses. На сиквеловском форуме есть пример кода от pkarklin. У меня так реализовано редактирование документов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 11:42 |
|
||
|
Как сделать генератор id и корректно выполнить insert в MSSQL
|
|||
|---|---|---|---|
|
#18+
Да, согласен. Использование identity наиболее простое и целесообразное решение. Однако возникает еще вопрос: как после insert передать клиенту этот самый id. Если использовать после insert IDENT_CURRENT для получения значения ключа последней добавленной записи - где гарантия что запись последняя? - долей секунды позже может прийти insert от другого клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 12:31 |
|
||
|
Как сделать генератор id и корректно выполнить insert в MSSQL
|
|||
|---|---|---|---|
|
#18+
Вместо IDENT_CURRENT() надо использовать SCOPE_IDENTITY(). Она, в отличии, от предыдущей функции возвращает значение Identity вставленное в текущее ограничение причем в пределах одного сеанса данных (т.е. в одном коннекте) Т.е. действуешь примерно так: LOACL lcString lcString = "SET NOCOUNT ON "+; "INSERT Tab1 (...) VALUES (...) "+; "SELECT SCOPE_IDENTITY() as LastIdentity" IF SQLExec(m.lnCH,m.lcString,'Result')=1 ?Result.LastIdentity ENDIF Полученное значение - это значение Identity созданное именно в твоем сеансе данных. Значения созданные в других коннектах не учитываются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 13:20 |
|
||
|
Как сделать генератор id и корректно выполнить insert в MSSQL
|
|||
|---|---|---|---|
|
#18+
Спасибо ВладимирМ! Попробую реализовать Ваш совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 13:45 |
|
||
|
Как сделать генератор id и корректно выполнить insert в MSSQL
|
|||
|---|---|---|---|
|
#18+
Я делаю так: Первичные ключи - int автоинкрементные после добавления записи получаю значение ключа a=SQLEXEC(nStatementHandle," SELECT @@IDENTITY AS 'newid'",'tokey32') newid=tokey32.newid && ключ SELECT tokey32 use After an INSERT, SELECT INTO, or bulk copy statement completes, @@IDENTITY contains the last identity value generated by the statement. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 06:27 |
|
||
|
Как сделать генератор id и корректно выполнить insert в MSSQL
|
|||
|---|---|---|---|
|
#18+
to Chel99: А может, клиентскому приложению и не нужно знать значение ключа последней добавленной в MS SQL записи (вопрос как вариант)? Может, имеет смысл написать хранимую процедуру, которая на основании полученных аргументов выполнит все необходимые действия, в частности, модификацию других таблиц БД? И всё это в одной транзакции, что одновременно решило бы проблему блокировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 09:04 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32450911&tid=1596948]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 268ms |
| total: | 428ms |

| 0 / 0 |
