Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как из INSERT получить что именно добавил сервер? (число прочтений - 2927 )
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Как из INSERT получить что именно добавил сервер?
12. Декабря 2007 :: 05:30
Печать  
Есть таблица, созданная так :
Код
Выбрать все
CREATE TABLE qwe ( a INTEGER PRIMARY KEY IDENTITY, b CHAR(10), c DATETIME ) 


Пишу в неё строчку так :
Код
Выбрать все
INSERT INTO qwe VALUES ( 'ghwrwq', '01.01.80' ) 


Сервер отвечает числом 1, имея ввиду "таки да, обработана (добавлена) 1 строка".
Как получить значение поля "а" в этой новой записи?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как из INSERT получить что именно добавил серв
Ответ #1 - 12. Декабря 2007 :: 05:34
Печать  
select top 1 a
from qwe
order by a desc
  

1&&2&&3
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как из INSERT получить что именно добавил серв
Ответ #2 - 12. Декабря 2007 :: 05:55
Печать  
Отлично, акцентирую вопрос :

как получить значение поля "а" именно строго этой записи, не делая допущения, что в это время ни кто больше не делает INSERT.

Точнее настойчиво ожидая, что другие юзеры активненько INSERT-ят тоже.

Или, если я все эти команды складываю в один запрос, то сосед не вклинится?
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как из INSERT получить что именно добавил серв
Ответ #3 - 12. Декабря 2007 :: 06:07
Печать  
Конечная задача:

на MS SQL сервере две таблицы:
Таб1: ИДсобытия, ДатаВремя, Пользователь, Документ
Таб2: ИДсобытия, ИмяРеквизита, СтароеЗначение, НовоеЗначение

Первая таблица - шапка, вторая - табличная часть, связаны по полю ИДсобытия... Все юзеры моей ДБФ базы (терминал) будут писать туда - кто чего наделал в доках. Сейчас вижу, что это будут два отдельных инсерта, и ИДсобытия из первого нужно скармливать второму. Можно, конечно, ИДсобытия придумывать самому, для чего добавить "нулевой" запрос перед первым, и в Таб1 IDENTITY не использовать...

Как правильно делать?

Инструмент, ессно, ODBCRecordSet.

Наивно надеялся, что ВыполнитьИнструкцию( "ИНСЕРТ..." ) вернет созданный набор данных, но ошибся Улыбка
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Как из INSERT получить что именно добавил серв
Ответ #4 - 12. Декабря 2007 :: 06:11
Печать  
Тут, мне кажется, надо выполнить эти два запроса в одной транзакции
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как из INSERT получить что именно добавил серв
Ответ #5 - 12. Декабря 2007 :: 06:21
Печать  
dnp писал(а) 12. Декабря 2007 :: 06:07:
Конечная задача:

на MS SQL сервере две таблицы:
Таб1: ИДсобытия, ДатаВремя, Пользователь, Документ
Таб2: ИДсобытия, ИмяРеквизита, СтароеЗначение, НовоеЗначение

Первая таблица - шапка, вторая - табличная часть, связаны по полю ИДсобытия... Все юзеры моей ДБФ базы (терминал) будут писать туда - кто чего наделал в доках. Сейчас вижу, что это будут два отдельных инсерта, и ИДсобытия из первого нужно скармливать второму. Можно, конечно, ИДсобытия придумывать самому, для чего добавить "нулевой" запрос перед первым, и в Таб1 IDENTITY не использовать...

Как правильно делать?

Инструмент, ессно, ODBCRecordSet.

Наивно надеялся, что ВыполнитьИнструкцию( "ИНСЕРТ..." ) вернет созданный набор данных, но ошибся Улыбка


а если так
Код
Выбрать все
select top 1 ИДсобытия
from Таб1
where Пользователь = 'твой пользователь'
order by desc ИДсобытия
 


можно наверное в условие добавить и  поля т.е ДатаВремя, Документ
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как из INSERT получить что именно добавил серв
Ответ #6 - 12. Декабря 2007 :: 06:25
Печать  
Z1 писал(а) 12. Декабря 2007 :: 06:21:
а если так
Код
Выбрать все
select top 1 ИДсобытия
from Таб1
where Пользователь = 'твой пользователь'
order by desc ИДсобытия
 


можно наверное в условие добавить и  поля т.е ДатаВремя, Документ

Точно!
Пользователь сам себя точно не перегонит.
Пасиб Улыбка
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как из INSERT получить что именно добавил серв
Ответ #7 - 12. Декабря 2007 :: 06:39
Печать  
dnp писал(а) 12. Декабря 2007 :: 05:55:
как получить значение поля "а" именно строго этой записи, не делая допущения, что в это время ни кто больше не делает INSERT.
транзакция + блокировка помогут в этом
  

1&&2&&3
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как из INSERT получить что именно добавил серв
Ответ #8 - 12. Декабря 2007 :: 07:30
Печать  
dnp писал(а) 12. Декабря 2007 :: 05:55:
Отлично, акцентирую вопрос :

как получить значение поля "а" именно строго этой записи, не делая допущения, что в это время ни кто больше не делает INSERT.

Точнее настойчиво ожидая, что другие юзеры активненько INSERT-ят тоже.

Или, если я все эти команды складываю в один запрос, то сосед не вклинится?

Вставки далать таким кодом:
Код
Выбрать все
ЗначениеПоляИдентификатора = Запрос.ВыполнитьСкалярный("
|set nocount on
|INSERT INTO qwe VALUES ( 'ghwrwq', '01.01.80' )
|select scope_identity()
|set nocount off
|");
 


  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как из INSERT получить что именно добавил серв
Ответ #9 - 12. Декабря 2007 :: 08:07
Печать  
Вот! Вот оно! Чуял, что щастье есть! Улыбка
Спасибо, DmitrO!
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать