Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / получение ID после Insert / 16 сообщений из 16, страница 1 из 1
06.04.2011, 12:04
    #37202011
Лампочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
если я в билдере в скрипте делаю
INSERT INTO table1(name1, name2) values(value1, value2)
в таблицу table1 с инкрементным первичным ключом (MS SQL),
можно ли как-то здесь же вернуть в скрипт ID вставленной строки? (Что-то вроде ораклового Returning)
...
Рейтинг: 0 / 0
06.04.2011, 12:23
    #37202071
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
INSERT INTO table1(name1, name2) values(value1, value2) ;
select max(id) into :ll_id from table1;
commit;
...
Рейтинг: 0 / 0
06.04.2011, 12:29
    #37202110
Лампочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
VanoR, нееее. В считанные миллисекунды куча пользователей может навставлять в эту таблицу еще записей. И при отборе максимума я получу совсем не ту строку, которую вставила.
...
Рейтинг: 0 / 0
06.04.2011, 12:36
    #37202155
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
я специально commit внизу добавил... тобишь обе операции будут производиться в пределах одной транзакции, должно нормально все возвращаться, если таблица блокируется после инсерта для других пользователей.
...
Рейтинг: 0 / 0
06.04.2011, 12:42
    #37202175
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
Если использвать DataStore, то:
Поставьте (выберите из списка) эту колонку в Identity column и уберите из Updateable Column (если она там отмечена).
После выполнения метода Update() там появляется значение автоматически.
В ASA для колонок с autoincrement-ом это работает.
...
Рейтинг: 0 / 0
06.04.2011, 12:43
    #37202179
Лампочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
VanoR, нет, не блокируется. Пользователи в банке должны иметь возможность делать все и всегда)
...
Рейтинг: 0 / 0
06.04.2011, 13:01
    #37202269
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
ЛампочкаVanoR, нет, не блокируется. Пользователи в банке должны иметь возможность делать все и всегда)
а вы проверьте :)
блокироваться должно, тем более в банке.... одна логическая операция должна выполняться в пределах одной транзакции, с соответствующими блокировками, а то вы так денег точно не досчитаетесь там.

ведь то, что я написал не выполняется часами и блокировку другие пользователи и не заметят.
...
Рейтинг: 0 / 0
06.04.2011, 13:06
    #37202289
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
06.04.2011 13:04, Лампочка пишет:

> если я в билдере в скрипте делаю
> INSERT INTO table1(name1, name2) values(value1, value2)
> в таблицу table1 с инкрементным первичным ключом (MS SQL),
> можно ли как-то здесь же вернуть в скрипт ID вставленной строки?

select @@identity отменили ;)?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
06.04.2011, 13:09
    #37202302
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
Dim200006.04.2011 13:04, Лампочка пишет:

> если я в билдере в скрипте делаю
> INSERT INTO table1(name1, name2) values(value1, value2)
> в таблицу table1 с инкрементным первичным ключом (MS SQL),
> можно ли как-то здесь же вернуть в скрипт ID вставленной строки?

select @@identity отменили ;)?

ну да... или так, но опять же в одной транзакции нужно запрашивать (до commit)
...
Рейтинг: 0 / 0
08.04.2011, 10:11
    #37206046
maniac85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
я использую SCOPE_IDENTITY
при этом insert выкидываю в хранимую процедуру, там же беру SCOPE_IDENTITY и возвращаю его как выходной параметр
вызов тогда становится совсем красивым

SQLCA.InsertCard(ll_cardid)

в ll_cardid будет искомый айдишник

P.S. считаю немного странным использовать max при наличии в MS SQL аж трех для этого стандартных способов SCOPE_IDENTITY, IDENT_CURRENT и @@IDENTITY
...
Рейтинг: 0 / 0
10.04.2011, 14:28
    #37208735
Лампочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
Спасибо, меня как раз @@identity интересовал! хотя и с помощью Reselectrow тоже пока работает..
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
29.06.2014, 21:06
    #38683177
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
VanoRINSERT INTO table1(name1, name2) values(value1, value2) ;
select max(id) into :ll_id from table1;
commit;

Скажите а как сделать что бы после получения id сделать опять INSERT, только в другую таблицу, и вставить в эту таблицу полученный id из SELECT?

Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
 INSERT INTO `#__objects` (
                    `added_by`, 
                    `metro_name`, 
                    `raion`,
                    `dead_year`,
                    `dead_kvartal`,
                    `dead_mounth`,
                    `desc`,
                     
                    `address`, 
                    `address_in_map`,
                    `modified`,
                    `modified_by`,
                    `created`,
                    
                    `zastroy`,
                    `name`,
                    `korpus`,
                    `type`,
                    `flors`,
                    `building_id`
                    )
                    
                    VALUES   (
                    '956', 
                    '$metro', 
                    '$rayon',
                    '$dead_year',
                    '$dead_kvartal',
                    '$dead_mounth',
                    '$desc',
                    '$address', 
                    '$address_in_map',
                    'NOW()',
                    '956',
                    'NOW()', 
                    '$builder_name',
                    '$nazvanie_doma',
                    '$corp',
                    '$buildingtype', 
                    '$floors',
                    '$building_id'
                    )
                    ; 
//Вот я вставляю запись.
//Теперь мне нужно получить id вставленной записи и вставить этот id в другую таблицу

select max(id) into :new_object_id from #__objects;

INSERT INTO `#__object_photos` (`object_id`,`full`,`apartment_id`,`need_parse`) VALUES ('new_object_id','$image','$apartment_id','1')
вот тут new_object_id будет работать? 

commit; 
...
Рейтинг: 0 / 0
30.06.2014, 11:31
    #38683494
VFl
VFl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
paha4444select max(id) into :new_object_id from #__objects;


Вообще max(id) это все же не совсем верно, может вернутся не то, несмотря на трансакцию. Лучше использовать функцию SCOPE_IDENTITY(), она возвращает последнее IDENTITY конкретно в вашем коннекте:

Код: sql
1.
select top 1 SCOPE_IDENTITY()  into :new_object_id from #__objects;
...
Рейтинг: 0 / 0
30.06.2014, 13:32
    #38683673
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
VFlнесмотря на трансакцию
Как отличить финансиста от программиста?
По тому, говорит ли он трансакция или транзакция
...
Рейтинг: 0 / 0
30.06.2014, 14:34
    #38683762
VFl
VFl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
Anatoly Moskovsky,

разоблачили :) По образованию действительно экономист. Но в Германии российские экономисты не котируются, пришлось переквалифицироваться.
...
Рейтинг: 0 / 0
03.07.2014, 11:53
    #38686639
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение ID после Insert
VFlpaha4444select max(id) into :new_object_id from #__objects;


Вообще max(id) это все же не совсем верно, может вернутся не то, несмотря на трансакцию. Лучше использовать функцию SCOPE_IDENTITY(), она возвращает последнее IDENTITY конкретно в вашем коннекте:

Код: sql
1.
select top 1 SCOPE_IDENTITY()  into :new_object_id from #__objects;



Сделал так:
Код: php
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
                    $sql .= " INSERT INTO `#__objects` (
                    `added_by`, 
                    `metro_name`, 
                    `raion`,
                    `dead_year`,
                    `dead_kvartal`,
                    `dead_mounth`,
                    `desc`,
                     
                    `address`, 
                    `address_in_map`,
                    `modified`,
                    `modified_by`,
                    `created`,
                    
                    `zastroy`,
                    `name`,
                    `korpus`,
                    `type`,
                    `flors`,
                    `building_id`
                    )
                    
                    VALUES   (
                    '956', 
                    '$metro', 
                    '$rayon',
                    '$dead_year',
                    '$dead_kvartal',
                    '$dead_mounth',
                    '$desc',
                    '$address', 
                    '$address_in_map',
                    'NOW()',
                    '956',
                    'NOW()', 
                    '$builder_name',
                    '$nazvanie_doma',
                    '$corp',
                    '$buildingtype', 
                    '$floors',
                    '$building_id'
                    )
                    ; 
                    ";
                    if($image){
                        $sql .= "INSERT INTO `#__object_photos` (`object_id`,`full`,`need_parse`) VALUES (LAST_INSERT_ID(),'$image','2');";
                        $counter++;
                        //$counter4++;
                    }



LAST_INSERT_ID()
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / получение ID после Insert / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]